繼續上一周的物件導向設計, 我們就差最後兩種繼承的方法還沒總結完
寄生式繼承
書中: 寄生式繼承是與原型式繼承緊密相關的一種思路, 它的思路與寄生建構函式模式和工廠模式類似, 即建立乙個僅用於封裝繼承過程的函式,該函式在內部以某種方式來增強物件, 最後再像真的是他做了所有工作一樣返回物件
簡單的來說: 就是他的思路就是將原型式繼承作為它內部的乙個物件增強手段(利用它完成繼承之後),再像寄生建構函式那樣將新物件返回出來
// 寄生式繼承
function createanother(obj) ;
return clone;
}
寄生組合式繼承 (最有效的繼承方式)
其實使用這個模式繼承主要是因為 組合式繼承 有乙個問題, 就用上面的組合繼承的**來示範:
// 組合式繼承
function supertype(name)
supertype.prototype.sayname = function () ;
function subtype(name, age)
subtype.prototype = new supertype(); // 第一次呼叫 supertype()
subtype.prototype.constructor = subtype;
subtype.prototype.sayage = function () ;
在上面當中 , 當實現繼承的時候 , 總共會有兩次呼叫 supertype, 這樣導致兩次重寫了 name與 age 屬性 , 為了避免不必要的麻煩, 我們將使用寄生組合式繼承來解決這個問題
function inheritprototype(subtype, supertype)
function supertype(name)
supertype.prototype.sayname = function () ;
function subtype(name, age)
inheritprototype(subtype, supertype);
subtype.prototype.sayage = function () ;
var sub1 = new subtype('yang', 1);
console.log(subtype.prototype)
sub1.sayage();
sub1.sayname();
inheritprototype當中, 用原型式繼承建立乙個新的(supertype的)原型物件 , 並對其增強(將構造器指標指向subtype), 最後再將subtype的 原型指標指向 新的原型物件
相對於組合繼承, 它沒有用傳統的原型鏈繼承實現繼承, 而是通過原型式繼承, 得到乙個supertype的 原型物件, 並在這個原型物件做繼承增強 , 避免多次呼叫supertype
通過這種寄生組合式繼承, 高效率地體現在每次例項物件時僅呼叫一次supertype , 避免了多次呼叫supertype 去建立不必要多餘的屬性, 與此同時, 原型鏈還能保持不變, 因此可以正常使用 instanceof 和 isprototypeof
JavaScript的物件導向
物件導向本身就是一種處理問題的思路,是對傳統面向過程程式設計的一種補充和完善 核心是類和物件的抽象封裝和建立,通過建立的各種物件之間互相協作 互相呼叫函式 完成乙個功能的完整流程 通過物件導向的三大特徵封裝 繼承 多型,來提高程式的健壯性 的復用性和功能的強大的擴充套件性。var people ne...
JavaScript物件導向
方法一 建構函式法 function cat cat.prototype.showname function var cat new cat cat.name tom cat.showname tom 它用建構函式模擬 類 在其內部用this關鍵字指代例項物件。類的屬性和方法,還可以定義在建構函式的...
javaScript物件導向
code 類lecture構造器 使用兩個字串函式,name和teacher function lecture name,teacher 類lecture的方法,生成乙個顯示該課程資訊的字串 lecture.prototype.display function 類schedule的構造器 使用乙個l...