Могу ли я динамически вызывать метод объекта, имеющий имя метода в виде строки? Я представляю это так:
var FooClass = function() {
this.smile = function() {};
}
var method = "smile";
var foo = new FooClass();
// I want to run smile on the foo instance.
foo.{mysterious code}(); // being executed as foo.smile();
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'FooClass'
кого-нибудь еще возникает эта уродливая ошибка ?Доступ к свойствам объектов можно получить через обозначение массива:
var method = "smile"; foo[method](); // will execute the method "smile"
источник
метод может быть вызван с помощью eval,
eval("foo." + method + "()");
возможно, это не очень хороший способ.источник
foo
есть{ fields: [{ id: 1 }] }
иmethod
естьfields[0]?.id
, но мне пришлось удалить()
из предложенного вами ответаКогда мы вызываем функцию внутри объекта, нам нужно указать имя функции в виде String.
var obj = {talk: function(){ console.log('Hi') }}; obj['talk'](); //prints "Hi" obj[talk]()// Does not work
источник
Я хотел бы оставить здесь пример. Например; Я хочу вызвать метод динамической проверки при отправке формы.
<form data-before-submit="MyObject.myMethod"> <button type="submit">Submit</button> </form>
$('form').on('submit', function(e){ var beforeSubmit = $(this).attr('data-before-submit'); if( beforeSubmit ){ params = beforeSubmit.split("."); objectName = params[0]; methodName = params[1]; result = window[objectName][methodName]($(this)); if( result !== true ){ e.preventDefault(); } } });
var MyObject = { myMethod = function(form){ console.log('worked'); return true; } };
источник