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

问题描述 投票:0回答:5

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

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();
javascript oop dynamic methods invoke
5个回答
256
投票

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

[]

foo[method]();

39
投票

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

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

11
投票

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

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

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

5
投票

可以使用 eval 调用方法

eval("foo." + method + "()");
可能不是很好的方法。


2
投票

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

<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;
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.