【发布时间】:2011-10-04 18:50:56
【问题描述】:
我在字符串中有一个函数名:
var func = "doTest";
我需要将此函数应用于当前实例(“this”);
所以我需要它来调用:
this.doTest();
我该怎么做?我无法通过窗口。
谢谢, 卫斯理
【问题讨论】:
标签: javascript jquery string function object
我在字符串中有一个函数名:
var func = "doTest";
我需要将此函数应用于当前实例(“this”);
所以我需要它来调用:
this.doTest();
我该怎么做?我无法通过窗口。
谢谢, 卫斯理
【问题讨论】:
标签: javascript jquery string function object
只需使用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();
【讨论】:
this 解决了什么问题?你在处理一个 jQuery 对象吗?更多信息。
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.
【讨论】:
试试下面的
var funcObj = this["doTest"];
funcObj.apply(this);
这样做是从this 中获取名为doTest 的成员。然后它通过apply 执行函数并告诉javascript 将this 绑定为函数内的this。如果您在非 this 值上考虑相同的代码,我认为该示例不会那么混乱
var obj = {
doTest: function() {
console.log("doTest called");
}
};
var doTestFunc = obj["doTest"];
doTestFunc.apply(obj);
在这种情况下,方法doTest 将使用值obj 作为this 执行
【讨论】:
如果你使用 jquery,你可以这样做:
$(this)[func]()
【讨论】: