Javascript 从 string 动态调用对象方法

我可以动态地调用一个方法名为字符串的对象方法吗:

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();
75834 次浏览

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

foo[method]();

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

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

方法可以用 eval 调用 eval("foo." + method + "()"); 可能不是个好办法。

当我们调用对象内部的函数时,我们需要提供函数的名称作为 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;
}
};