Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript从字符串动态调用对象方法_Javascript_Oop_Dynamic_Methods_Invoke - Fatal编程技术网

Javascript从字符串动态调用对象方法

Javascript从字符串动态调用对象方法,javascript,oop,dynamic,methods,invoke,Javascript,Oop,Dynamic,Methods,Invoke,我可以动态调用方法名为字符串的对象方法吗?我会这样想: 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(); 如果属性的名

我可以动态调用方法名为字符串的对象方法吗?我会这样想:

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();

如果属性的名称存储在变量中,请使用
[]

foo[method]();

可以通过数组表示法访问对象的属性:

var method = "smile";
foo[method](); // will execute the method "smile"

方法可以通过eval调用
eval(“foo.”+方法+“()”)

可能不是很好的方法。

当我们在对象内调用函数时,我们需要以字符串形式提供函数名

var obj = {talk: function(){ console.log('Hi') }};

obj['talk'](); //prints "Hi"
obj[talk]()// Does not work

我想在这里留下一个例子。例如我想在提交表单时调用一个动态检查方法


提交
$('form')。关于('submit',函数(e){
var beforesmit=$(this.attr('data-beforesmit');
如果(提交前){
params=beforesmit.split(“.”);
objectName=params[0];
methodName=params[1];
结果=窗口[objectName][methodName]($(this));
如果(结果!==真){
e、 预防默认值();
}
}
});
var MyObject={
myMethod=函数(形式){
console.log('worked');
返回true;
}
};

在函数中使用变量对我不起作用:const genericResolver=(表、操作、值)=>{return Auth.isAuthenticated()。然后(()=>{return eval(table).findAll()如果要从类中的另一个方法执行方法,请使用此['methodName']()。获取这个丑陋的错误
元素隐式地具有“any”类型,因为类型“string”的表达式不能用于索引类型“FooClass”
任何其他人?为代码提供一些注释总是很有帮助的,这样就可以在上下文之外理解它。添加了一些注释。谢谢!在我的例子中,
foo
{fields:[{id:1}]}
方法
字段[0]?.id
,但我必须从您建议的答案中删除
()