最近有些朋友一直問起prototye是什么,偶一直不怎么做javascript開發(fā),只能簡單說說自己的理解。

javascript其實(shí)不是嚴(yán)格意義的OO語言,至少他沒有很好地實(shí)現(xiàn)封裝和繼承,甚至javascript使用的是function式對象。

因此,javascript有一個奇怪的東西就是prototype,javascript中約定了每個對象都可以包含一個prototype對象的引用(屬性),
這個prototype對象在運(yùn)行時是不可見的,也就是說,定義了之后,你無法直接使用prototype對象。

那么,prototype對象有什么用呢?它的作用,就是當(dāng)你去調(diào)用一個對象的函數(shù)或?qū)傩詴r,javascript首先會在這個對象的定義中查找,如果找不到,
他就會去找這個對象的prototype對象有沒有這個定義,如果還找不到,他又會去找prototype對象的prototype,一直到對象沒有prototype定義為止。

是不是和函數(shù)繼承的目的很象?這就是javascript的原型繼承特性。
但是我們也看出了,這種查找方式,效率非常之低,尤其在prototype鏈很長的情況下。javascript 2.0會對此有所改進(jìn)。

另外,prototype的定義方式也很奇怪,他必須以一個對象實(shí)例(而不是類)的形式,綁定到其他類上。記得嗎?prototype是定義時的,同時又是對象。

例子:
?? ?o1 = function(){};
?? ?o2 = function(){};
??? o2.prototype = new o1;??

如果嫌直接使用prototype挺麻煩,你可以去下載一個prototype.js來用,這個封裝真的挺不錯:)