我在字符串中有一个函数名称:
var func = "doTest";
我需要将此函数应用于当前实例(“this”);
所以我需要它来打电话:
this.doTest();
我该怎么做?我不能通过窗户。
谢谢, 韦斯利
答案 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]()