2011-02-25 47 views
6

我認爲我錯過了一些非常簡單的東西。我想傳遞一個對象的函數和調用的方法。這篇文章的原因太長了。 :-)如何動態調用JavaScript對象的方法

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 
} 

謝謝!

回答

15

您需要括號在電話會議上,類似這樣的:

obj[funcName](); 

你可以得到的eval這樣的工作:

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

但也有很多理由不這樣做(security, performance, harder debugging) 。

+0

謝謝!我知道我錯過了一些簡單的事情。我真的認爲我之前嘗試過obj [funcName](),但它現在適用於我。 – David 2011-02-25 02:00:22

+2

請小心使用'eval' :) http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea – 2011-02-25 02:02:40

+0

請參閱[我的評論](http:///stackoverflow.com/questions/5112793/how-do-i-dynamically-call-a-javascript-objects-method/5112938#5112938)關於使用eval和其他選項沒有eval的安全性。此外,除了不安全之外,eval的效率可能非常低,尤其是當您進行適當的輸入驗證時,但即使沒有驗證,每次運行時都會調用編譯器。 – rsp 2011-02-25 04:55:58

1

當處理obj[funcName]();時,你必須照顧對象的實例。如果你想在函數調用中使用private propetry形式的對象,它將使用它,因爲它是一個靜態屬性。

相關問題