2011-02-25 8 views
6

Burada çok basit bir şeyi kaçırdığımı düşünüyorum. Bir işlevi bir nesneyi ve aramak için yöntemi geçmek istiyorum. Bu gönderi için neden uzun süredir. :-)Bir JavaScript nesnesinin yöntemini dinamik olarak nasıl arayabilirim?

var myObj = new someObject(); 
var funcName = "hide"; 

function callObject(myObj,funcName){ 
    obj.hide(); //this works  
    obj[funcName]; //doesn't work 
    obj.eval(funcName); //doesn't work either.. tried many variations 
} 

Teşekkür ederiz!

cevap

15

Bunu, çağrı üzerine parantez gerekir:

obj[funcName](); 

Böyle çalışmak için eval alabilirsiniz:

eval("obj." + funcName + "()"); 

ama yapmak değil birçok nedeni vardır (security, performance, harder debugging) .

+0

Teşekkür ederiz! Basit bir şey kaçırdığımı biliyordum. Gerçekten daha önce [funcName]() 'i denediğimi düşündüm ama şimdi benim için çalışıyor. – David

+2

Dikkatle kullanmadan eval kullanın :) http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea –

+0

Bkz. [Yorumum] (http://stackoverflow.com/questions/5112793/how-do-i-dynamically-call-a-javascript-objects-method/5112938#5112938) değerlendirmeden değerlendirme ve diğer seçenekleri kullanmanın güvenliği hakkında. Ayrıca, güvensiz olmanın yanı sıra, özellikle doğru bir giriş doğrulaması yaptığınızda, değerlendirme çok verimsiz olabilir, ancak doğrulama olmadan bile, her çalıştırdığınızda derleyiciyi çağırırsınız. – rsp

1

obj[funcName](); ile çalışırken, nesnenin örneğine dikkat etmeniz gerekir. Eğer özel bir propetry kullanmak istiyorsanız, işlev çağrısı içindeki nesneyi, statik bir özellik olduğu için kullanacaktır.