JavaScript 物件導向的程式設計 二

2021-08-21 07:01:59 字數 1622 閱讀 9689

繼續上一周的物件導向設計, 我們就差最後兩種繼承的方法還沒總結完

寄生式繼承

書中: 寄生式繼承是與原型式繼承緊密相關的一種思路, 它的思路與寄生建構函式模式和工廠模式類似, 即建立乙個僅用於封裝繼承過程的函式,該函式在內部以某種方式來增強物件, 最後再像真的是他做了所有工作一樣返回物件

簡單的來說: 就是他的思路就是將原型式繼承作為它內部的乙個物件增強手段(利用它完成繼承之後),再像寄生建構函式那樣將新物件返回出來 

// 寄生式繼承

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...