js 類的繼承實現

2021-10-25 21:36:42 字數 1746 閱讀 4096

function supertype()

supertype.prototype.getsupervalue = function()

function subtype()

// 繼承supertype

subtype.prototype = new supertype()

let instance = new subtype()

原型鏈繼承的缺點

function supertype()

supertype.prototype.getsupervalue = function()

function subtype()

let instance = new subtype()

建構函式繼承

優點:在子類建構函式中能向父類建構函式傳參

缺點:

function supertype(name)

supertype.prototype.getsupervalue = function()

function subtype(name)

// 繼承方法

subtype.prototype = new supertype()

let instance = new subtype()

組合繼承的缺點

function object(o)

f.prototype = o

return new f()

}let person =

let anotherperson = object(person)

// ecmascript5通過object.create()方法實現跟object() 一樣的效果

let anotherperson2 = object.create(person)

原型式繼承適合於不需要單獨建立建構函式,但是仍然需要在物件間共享資訊的場合

缺點:原型中包含的引用值會在所有例項共享

function createanother(original); 

return clone // 返回這個物件

}let person =

let anotherperson = createanother(person)

寄生式繼承與原型式繼承比較相似。它的思路是:建立乙個實現繼承的函式,以某種方式增強物件,然後返回這個物件。object()函式不是寄生式 繼承所必需的,任何返回新物件的函式都可以在這裡使用

缺點:給物件新增的函式會導致函式難以復用

function inheritprototype(subtype, supertype) 

function supertype(name)

function subtype(name, age)

inheritprototype(subtype, supertype)

寄生組合繼承的優點:只呼叫了一次supertype的建構函式,避免了subtype上不必要也用不上的屬性

js實現類繼承

為了讓自己能把繼承的實現機制理解得更透徹,還是決定看能不能通過自己的理解講述出來,以下文章如有不妥之處請積極批評指正,感激不盡。我們知道js中一切皆物件,但是當我們把流行的物件導向的語言特性套到js身上時卻略顯尷尬,為啥?js沒有提供繼承機制,這個得我們自己動手來模擬實現。不管是傳統的方法還是所謂的...

js類的繼承

如何實現類的繼承呢?有如下2個建構函式 function peopleclass peopleclass.ptototype function studentclass name,function peopleclass peopleclass.ptototype function studentc...

JS類的繼承

目錄 js類 寫類 繼承get set static 方法static修飾 屬性static修飾 特殊 var v parent new parent console.log v parent 就以上面的parent類為父類,寫乙個studnet繼承他 class student extends p...