2011-10-04 62 views
7

我在一個字符串中有一個函數名稱:從對象中的字符串調用函數?

var func = "doTest"; 

我需要這個功能被應用到當前實例(「本」);

所以我需要它來打電話:

this.doTest(); 

我怎樣才能做到這一點?我無法通過窗口去。

感謝, 韋斯利

回答

22

只需使用的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(); 
+0

this.apply不工作,是不正確的? – Wesley

+0

我更新了我的答案。如果仍然不夠,請給我們更多的細節。 「這個」解決了什麼?你在處理一個jQuery對象嗎?更多信息。 –

3

請嘗試以下

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

這樣做是搶命名doTestthis成員。然後它通過apply執行該功能,並在該函數內告知javascript將this綁定爲this。我認爲,這個例子是一個少一點混亂,如果你考慮在非該值

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

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

相同的代碼在這種情況下,方法doTest將與價值obj作爲this

0

如果你是被執行使用jQuery你可以做:

$(this)[func]() 
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. 
相關問題