从字符串调用Javascript函数

时间:2014-01-29 16:30:57

标签: javascript string object

是否可以从字符串中调用javascript函数,函数在对象中?

例如:从下面的对象调用“main.object.doSomething()”(注意它是一个字符串)。

window.main = {
    object: {
        doSomething: function(){
            alert('Called');
       }
    }
}

---更新---

...不使用eval();

5 个答案:

答案 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");

http://jsfiddle.net/79nWH/

答案 1 :(得分:1)

您可以使用eval,所以:

eval("main.object.doSomething()");

但是eval是邪恶的 - 试着避免它。

答案 2 :(得分:1)

请勿使用evalmany 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)

答案 4 :(得分:0)

让我们说你的字符串如下:

var funcString = "window.main = {
    object: {
        doSomething: function(){
            alert('Called');
       }
    }
}";
eval(funcString);

如果你已经在页面中定义了你的功能,你可以用两种不同的方式调用它,使用eval(没有js专家永远不会使用它,你应该在你没有任何其他时使用它)选项):

eval("main.object.doSomething()");

另一种方法是使用匿名函数:

Function("main.object.doSomething();")();