在前兩篇文章中,介紹了構造繼承和原型繼承。今天把剩下的兩種寫完,這兩種的應用相對於前兩種來說應用很少,因此我把他們稱為是非主流繼承方式。
首先,我們來看非主流繼承一:例項繼承法。
我也不說那麼多廢話了,既然是非主流繼承,就一定不常用,既然不常用還存在,那就只有乙個因素,他用於特定的場合。例項繼承法,就主要用於核心物件的繼承,也是目前為止唯一能夠解決核心物件繼承的方式。
核心物件的繼承擁有一定的價值,比如說error物件,我們公司可能要自己實現乙個error 類來簡化今後的開發,那麼這個時候我就要使用例項繼承法來繼承error。
**如下:
function extendingerror(mes)
var instance=new error(mes);
instance.newerror=function()
好了,再寫段**看下如何使用:
function animal()
function people()
people.extend(new animal())
明眼人一眼看出來,這個方法的缺點太明顯了:
將物件的屬性方法一一複製的時候,其實用的是反射,反射對效率的損傷我就不多說了。
和原型繼承一樣,必須初始化父類物件,當確定繼承關係時,但是引數還不確定時,玩不轉!
總之,這個方法一般情況下不用。
好了,下面說個常用的東西。混合繼承!
這個是基於兩個主流繼承方式的。對比兩個繼承方式,我們可以發現兩個繼承方式的優缺點是互補的,那就好辦了,混合到一起吧!
function people(name) }
function girl(name,age) }
//原型繼承
girl.prototype=new people();
好了,兩種方式的混合,現在看看,是不是問題解決了呢?
測試通過!
這是乙個相對完美的解決方案,但是卻增加了**的複雜度,所以具體的方案還要靠大家在實踐中去選擇。
JavaScript物件導向程式設計 繼承(三)
前面學習了類式繼承和建構函式繼承組合使用,也就是組合繼承,但是這種繼承方式有個問題,就是子類不是父類的例項,而子類的原型是父類的例項。子類不是父類例項的問題是由類式繼承引起的。因此還有一種更好的繼承方式,那就是寄生組合式繼承,也就是寄生式繼承和建構函式繼承的組合,因為寄生式繼承依託於原型繼承,原型繼...
JavaScript 繼承 組合繼承
繼承 組合繼承 組合繼承也叫做偽經典繼承,指的是將原型鏈和借用建構函式的技術組合到一塊,從而發揮二者之長的一種繼承模式。組合繼承的基本思路是使用原型鏈實現對原型屬性和和方法的繼承,而通過借用建構函式來實現對例項屬性的繼承。組合繼承通過在原型上定義方法實現了函式復用,又能夠保證每個例項都有它自己的屬性...
javascript繼承機制
一 call 在子類中,用父類.call this,arg0,arg1,arg2.可以繼承父類。注意call的位置,盡量在子類的第一行 js按順序執行,放在後面可能對子類的其它屬性 方法有影響。比如子類和父類有相同名字的方法,後面的覆蓋前面的 馬上 分析 單純使用call這種類式繼承,對原型方法不起...