从对象内的字符串调用函数?

时间:2011-10-04 18:50:56

标签: javascript jquery string function object

我在字符串中有一个函数名称:

 var func = "doTest";

我需要将此函数应用于当前实例(“this”);

所以我需要它来打电话:

 this.doTest();

我该怎么做?我不能通过窗户。

谢谢, 韦斯利

4 个答案:

答案 0 :(得分:22)

只需使用object[functionName]();的构造,就像这样:

function Person() {};
Person.prototype.speak = function() { alert('ohai'); };
var john = new Person, action = 'speak';

john[action]();

替代风格:

var Person = {  
  speak: function() { alert('ohai'); }, 
  speakDelegate: function() { var action = 'speak'; this[action](); } 
};
Person.speakDelegate();

答案 1 :(得分:6)

this[func]();

不需要.call.apply,因为上下文保留在引用中。

例如:

var obj = {
   doTest: function(){ console.log(this); },
   fn: function(){ var name='doTest'; this[name](); }
};
obj.fn(); // logs the object, proving this has the correct context.

答案 2 :(得分:3)

尝试以下

var funcObj = this["doTest"];
funcObj.apply(this);

这样做是从doTest获取名为this的成员。然后它通过apply执行该函数,并告诉javascript将this绑定为函数内的this。如果你在非这个值上考虑相同的代码,我认为这个例子有点混乱

var obj = {
  doTest: function() {
    console.log("doTest called");
  }
};

var doTestFunc = obj["doTest"];
doTestFunc.apply(obj);

在这种情况下,方法doTest将以值obj执行this

答案 3 :(得分:0)

如果你正在使用jquery,你可以这样做:

$(this)[func]()