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

Posted

技术标签:

【中文标题】Javascript从字符串动态调用对象方法【英文标题】:Javascript dynamically invoke object method from string 【发布时间】:2012-04-08 22:41:22 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

当我们在对象内部调用函数时,我们需要提供函数名作为字符串。

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

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

【讨论】:

在代码中提供一些注释总是有帮助的,这样可以脱离上下文理解。 添加了一些评论。谢谢!【参考方案3】:

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

【讨论】:

foo fields: [ id: 1 ] methodfields[0]?.id 的情况下很有用,但我必须从您提出的答案中删除 ()【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

foo[method]();

【讨论】:

在函数中使用变量对我不起作用:const genericResolver = ( table, action , values ) => return Auth.isAuthenticated() .then(() => return eval(表).findAll() 如果你想从一个类中的另一个方法执行一个方法,使用 this['methodName']()。 得到这个丑陋的错误Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'FooClass'其他人?

以上是关于Javascript从字符串动态调用对象方法的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 4 中使用动态类型访问 javascript 对象的属性

java基础-反射

动态代理_基础版

多态总结

网站前端_JavaScript-DOM编程.0003.JavaScriptDom动态创建?

php静态动态对象及json格式