2011-10-04 24 views
7

Bir dizede bir işlev adı var:Nesne içindeki nesneden arama işlevi?

var func = "doTest"; 

Ben geçerli örneği ("Bu") uygulanacak bu işlevi gerek;

Bu yüzden çağırmanız gerekir:

this.doTest(); 

Bunu nasıl yapabilirim? Pencereden gidemem.

sayesinde Wesley

cevap

22

Sadece çok gibi object[functionName](); kurgusunu kullanın: Örneğin:

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

john[action](); 

Alternatif stili:

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

this.apply (fonk) görünmüyor iş, bu yanlış mı? – Wesley

+0

Cevabımı güncelledim. Bu hala yeterli değilse, lütfen bize daha fazla ayrıntı verin. Bu ne 'çözmek' nedir? Bir jQuery nesnesiyle mi uğraşıyorsunuz? Daha fazla bilgi. –

3

deneyin ne yapar this den doTest adlı üyeyi kapmak olduğunu

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

aşağıdaki. Daha sonra işlevi apply aracılığıyla yürütür ve javascript'in this işlevini this olarak işlevine bağlamasını söyler. Sana yöntem doTest Eğer varsa this

0

olarak değeri obj ile çalıştırılacaktır Bu durumda olmayan bu değere

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

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

aynı kodu düşünülürse örnek biraz daha az kafa karıştırıcı olduğunu düşünüyorum jquery kullanarak sadece yapabilirsiniz:

$(this)[func]() 
6
this[func](); 

gerek .call veyaiçin Bağlam referansta tutulduğundan,.

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. 
İlgili konular