一聽到「寄生式繼承」這個名詞很容易產生畏難感,這是什麼東東呢?別急,本篇文章將嘗試用簡單易懂的方式闡述JS中的這種繼承方式,希望能幫助大家。
我們先定義一個空函數,形參是original,就像下面這樣:
function createAnother(original){}
在該函數中建立一個新物件clone:
function createAnother(original){ var clone=Object.create(original); }
給clone物件增加屬性sayHi,sayHi屬性是一個函數:
function createAnother(original){ var clone=Object.create(original); clone.sayHi=function(){ alert('hi'); }; }
最後,回傳clone物件:
function createAnother(original){ var clone=Object.create(original); clone.sayHi=function(){ alert('hi'); }; return clone; }
假設我們有這樣一個物件:
var person={ name:'Nicholas', friends:['Shelby','Court','Van'] };
將以上物件作為實參傳入我們的函數運行:
var anotherPerson=createAnother(person); anotherPerson.sayHi();
運行結果是:將彈出'Hi'的視窗。
我們看到,函數createAnother有這樣一句:
var clone=Object.create(original);
這不就是原型式繼承嗎?
的確,這裡確實在內部使用了原型式繼承的方法,最後回傳的就是clone物件。不過還是跟原型式繼承有點差別:
原型式繼承繼承了原物件的屬性,新物件並沒有新的額外屬性;寄生式繼承在內部就可以為新物件增加屬性,新物件除了擁有原始物件的屬性,也擁有內部增加的屬性。
以上例來說,相較於原型式繼承,多出來的關鍵語句:
clone.sayHi=function(){ alert('hi'); };
建立一個實例後,該實例就擁有該屬性。
相關推薦:
以上是JS繼承之寄生式繼承的詳細內容。更多資訊請關注PHP中文網其他相關文章!