2014-01-17 97 views
2

如果我有一些對象中定義的函數在調用內部目標函數:使用括號記號

var myobject={ 
myfunction:function(){//mycode here} 
} 

通常可以使用訪問功能:

myobject.myfunction() 

,但如果我想使用

myobject["myfunction"] 

試圖這樣,實際上函數沒有被調用,我怎麼能調用函數使用括號s符號?

+0

只是一個旁註 - 使用括號表示,你也可以有其他功能名稱,否則無效。因此'myobject [「我的函數」]()'會工作,但'myobject.my函數()'使用點符號不會。 – RBT

回答

7

使用它就像。你是非常接近

myobject["myfunction"](); 

你也可以做到這一點

var myfuncname="myfunction"; 
myobject[myfuncname](); 
+0

非常感謝,這正是「他們」所需要的:P – ProllyGeek

+1

+1,我唯一的評論是你在一個例子中使用雙引號,在另一個例子中使用雙引號。也許對初學者來說,這可能被認爲是必要的差異。 – Peter

+0

@ProllyGeek,誰是「他們」? – Satpal

1

兩種形式

myobject.myfunction; 

myobject["myfunction"]; 

是等價的,只要你只能使用固定字符串來訪問成員(使用一個計算值是一個不同的問題,那麼你必須使用第二種形式)。這兩條線導致函數對象成員myfunction,你可以分配給一個變量,如果你喜歡,並調用:

var myfunc = myobject.myfunction; 
myfunc(); 

注意,將其分配給變量打破了this變量,所以你可能不希望要做到這一點,如果你正在做OOP。

正如你提到的,調用函數意味着增加()與參數列表之後,也沒關係,該功能是通過一個表達式獲得的,所以無論是:

myobject.myfunction(); 

myobject["myfunction"]();