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 ]
和 method
是 fields[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 对象的属性