j
在JavaScript中,prototype對象是實現面向對象的一個重要機制。
j
函數就是對象。 其實通常我們在javascript裏定義的一個函數,都對應着一個以這個函數體爲構造函數的對象。 而javascript與java不同的是,他是面向原形的面嚮對象語言。java是基於類的面嚮對象語言。 也就是說,可以通過對象來new出一個新的對象。 比如:定義 function fun(p1,p2){} 時, 實際上生成了一個Function類型(預定義類型)的對象,對象名叫fun,對象的構造函數就是這個函數的體. 於是,也可以用另一種方式定義剛纔的函數(其實是對象)。 fun=new Function(‘p1,’p2’,…) ;(這種方式定義時,前面的參數都是函數的參數。只有最後一對 ‘’ 裏,寫入函數體) 對於這個對象,採用fun.var=“XXX”的方式,就可以爲對象增加一個屬性。而無須聲明。 從對象org 去new一個新對象時,首先調用該org的構造函數(函數org定義時的函數體爲對象 org的構造函數)。 然後將org對象的prototype屬性的子屬性(函數和變量)copy到新對象中。 還有構造函數裏以 this.XXX= [ function (){}或“xxx”] 形式定義的XXX屬性也copy到新對象中去。 當然在對象生成後,也可以另行添加屬性(即函數)。 一種方式是其父對象的prototype.xxx下添加,一種是其自己 self.xxx方式添加。 在搜索的時候,先搜索自身然後在搜索父對象的prototype下的屬性。即後者可以覆蓋前者。
在JavaScript中,prototype對象是實現面向對象的一個重要機制。