是否可以从字符串中调用javascript函数,函数在对象中?
例如:从下面的对象调用“main.object.doSomething()”(注意它是一个字符串)。
window.main = {
object: {
doSomething: function(){
alert('Called');
}
}
}
---更新---
...不使用eval();
答案 0 :(得分:2)
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");
答案 1 :(得分:1)
您可以使用eval
,所以:
eval("main.object.doSomething()");
但是eval
是邪恶的 - 试着避免它。
答案 2 :(得分:1)
请勿使用eval
!有many good reasons not to use eval
,大部分时间都没有理由这样做。相反,您可以使用字符串属性查找语法来获取您要查找的方法:main.object.doSomething()
等同于main.object['doSomething']()
。因此,例如,如果要根据字符串调用函数,则可以执行以下操作:
var methodToCall = 'doSomething';
main.object[methodToCall]();
如果在属性查找后将括号放在右边,对你来说很奇怪,你也可以main.object[methodToCall].call(null)
。
答案 3 :(得分:0)
使用eval(表达式或函数)
在http://www.w3schools.com/jsref/jsref_eval.asp中了解相关内容 或http://viralpatel.net/blogs/calling-javascript-function-from-string/
答案 4 :(得分:0)
让我们说你的字符串如下:
var funcString = "window.main = {
object: {
doSomething: function(){
alert('Called');
}
}
}";
eval(funcString);
如果你已经在页面中定义了你的功能,你可以用两种不同的方式调用它,使用eval(没有js专家永远不会使用它,你应该在你没有任何其他时使用它)选项):
eval("main.object.doSomething()");
另一种方法是使用匿名函数:
Function("main.object.doSomething();")();