我在一個字符串中有一個函數名稱:從對象中的字符串調用函數?
var func = "doTest";
我需要這個功能被應用到當前實例(「本」);
所以我需要它來打電話:
this.doTest();
我怎樣才能做到這一點?我無法通過窗口去。
感謝, 韋斯利
我在一個字符串中有一個函數名稱:從對象中的字符串調用函數?
var func = "doTest";
我需要這個功能被應用到當前實例(「本」);
所以我需要它來打電話:
this.doTest();
我怎樣才能做到這一點?我無法通過窗口去。
感謝, 韋斯利
只需使用的object[functionName]();
的結構,像這樣:
function Person() {};
Person.prototype.speak = function() { alert('ohai'); };
var john = new Person, action = 'speak';
john[action]();
另類風格:
(FUNC)似乎var Person = {
speak: function() { alert('ohai'); },
speakDelegate: function() { var action = 'speak'; this[action](); }
};
Person.speakDelegate();
請嘗試以下
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
如果你是被執行使用jQuery你可以做:
$(this)[func]()
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.
this.apply不工作,是不正確的? – Wesley
我更新了我的答案。如果仍然不夠,請給我們更多的細節。 「這個」解決了什麼?你在處理一個jQuery對象嗎?更多信息。 –