繁体   English   中英

从字符串调用Javascript函数

[英]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");

http://jsfiddle.net/79nWH/

您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM