Javascript用字符串执行函数

时间:2012-09-29 18:45:51

标签: javascript

我正在创建一个类似的原型类,但我想使用字符串作为函数名来调用函数。我找到了windowname;在某个地方的例子,但它在我的情况下不起作用。

function someObj() {

  this.someMethod = function() {
    alert('boo'); 
    name = "someOtherMethod";
    window[name]();
  }

  var someOtherMethod = function() {
    alert('indirect reference');
  }

}

4 个答案:

答案 0 :(得分:1)

这是因为"someOtherMethod"不是window对象的成员,因为它在someObj函数中定义。

答案 1 :(得分:0)

window仅适用于全局变量。

你无法通过字符串访问本地变量,你使用eval,这几乎总是一个坏主意。

另一种方法是使用对象。这允许您使用字符串查找属性。

function someObj() {

  var methods = {};

  methods.someMethod = function() {
    alert('boo'); 
    var name = "someOtherMethod";
    methods[name]();
  }

  methods.someOtherMethod = function() {
    alert('indirect reference');
  }

}

答案 2 :(得分:0)

someOtherMethod在窗口中隐藏,仅存在于原型的范围内。

尝试将其移出。

function someObj() {
    this.someMethod = function() {
       alert('boo'); 
       name = "someOtherMethod";
       window[name]();
     }
}

var someOtherMethod = function() {
    alert('indirect reference');
}

虽然使用全局变量是个坏主意。

答案 3 :(得分:0)

创建自己的方法哈希:

function someObj() {

  this.someMethod = function() {
    alert('boo'); 
    name = "someOtherMethod";
    methods[name]();
  }

  var methods = {
    someOtherMethod : function() {
        alert('indirect reference');
    }
  };
}

您的变量是您的函数的本地变量,因此它不会出现在window中。即使您在全局范围内工作,最好使用您自己的对象而不是依赖窗口,这样您就可以避免名称冲突。