原型雖然很強(qiáng)大善茎,可以用它來實(shí)現(xiàn)繼承捏肢,但它也存在一些問題神得。其中厘惦,最主要的問題來自包含引用類型值的原型。想必大家還記得哩簿,我們前面介紹過包含引用類型值的原型屬性會被所有實(shí)例共享而這也正是為什么要在構(gòu)造函數(shù)中宵蕉,而不是在原型對象中定義屬性的原因。在通過原型屬性來實(shí)現(xiàn)繼承時(shí)节榜,原型實(shí)際上會變成一個(gè)類型的實(shí)例羡玛。于是,原先的實(shí)例屬性也就順理成章地變成了現(xiàn)在的原型屬性了全跨。
下面代碼可以用來說明這個(gè)問題
這個(gè)例子中的SuperType構(gòu)造 數(shù)? 了一個(gè)colors性缝左,該屬性包含一個(gè)數(shù) (引用類型值)亿遂。SuperType的每個(gè)實(shí)例都會有各自包含自己數(shù)組的colors屬性浓若。當(dāng)SubType通過原型繼承了SuperType之后,SubType.prototype就變成了SuperType的一個(gè)實(shí)例蛇数,因此它也擁有了一個(gè)它自己的colors性? 就跟專門創(chuàng)建了一個(gè)SubType.prototype.colors性一樣挪钓。但結(jié)果是什么呢?結(jié)果是SubType的所有實(shí)例都會共享這一個(gè)colors屬性耳舅。而我們對instance1.colors的修改能夠通過instance2.colors反映出來碌上,就已經(jīng)經(jīng)充分分證實(shí)了這一點(diǎn)。
? ? ? 原型鏈的第二問題是在創(chuàng)建子類型的實(shí)例時(shí)浦徊,不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)馏予。實(shí)際上,應(yīng)該說是沒有辦法在不影響所有對象實(shí)例的情況下盔性,給超類型的構(gòu)造函數(shù)傳遞參數(shù)數(shù)霞丧。有鑒于此,再加上前面剛剛討論過的由于原型中包含引用類型值所帶來的問題冕香,實(shí)踐中很少會單獨(dú)使用原型鏈 ?蛹尝。