[英]Call Javascript function from string
是否可以从字符串中的对象中使用JavaScript调用函数?
例如:从下面的对象调用“ main.object.doSomething()”(注意它是一个字符串)。
window.main = {
object: {
doSomething: function(){
alert('Called');
}
}
}
-更新-
...不使用eval();
window.main = {
object: {
doSomething: function(){
alert('Called');
}
}
}
function callFromString(aString) {
var parts = aString.split(".");
var obj = window;
for (var i = 0; i < parts.length - 1; i++) {
obj = obj[parts[i]];
if (!obj)
return;
}
// strip () at the end of parts[parts.length - 1] if they are present
if (obj[parts[parts.length - 1]])
obj[parts[parts.length - 1]]();
}
callFromString("main.object.doSomething");
您可以使用eval
,因此:
eval("main.object.doSomething()");
但是eval
是邪恶的-设法避免它。
不要使用eval
! 有很多理由不使用eval
,并且在大多数情况下绝对没有理由使用eval
。 相反,您可以使用字符串属性查找语法来获取您要查找的方法: main.object.doSomething()
等同于main.object['doSomething']()
。 因此,例如,如果您要基于字符串调用函数,则可以执行以下操作:
var methodToCall = 'doSomething';
main.object[methodToCall]();
如果将括号放在属性查找后看起来很奇怪,您也可以执行main.object[methodToCall].call(null)
。
假设您的字符串如下:
var funcString = "window.main = {
object: {
doSomething: function(){
alert('Called');
}
}
}";
eval(funcString);
并且如果您已经在页面中定义了函数,则可以使用eval(没有js专家永远不会提供的2种方法)以两种不同的方式调用它:您应该在没有其他选择的情况下使用它:
eval("main.object.doSomething()");
另一种方法是使用匿名函数:
Function("main.object.doSomething();")();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.