ES5,ES6中的繼承

2021-09-24 22:25:07 字數 2127 閱讀 6197

es5中的繼承:

1,借助建構函式實現繼承;(只能實現部分繼承)

原理:通過call()函式改變this指向,將父類屬性掛載到子類例項中;

function parent() 

function child()

console.log(new child())

總結:優點:只呼叫一次父類的建構函式,避免了在子類原型中建立不必要的,多餘的屬性;原型鏈保持不變;

缺點:只能實現部分繼承,如果父類屬性都在建構函式中,則能實現全部繼承,如果父類原型物件上還有方法,子類不能繼承;

2,借助原型鏈實現繼承;

原理:將子類的prototype屬性賦值為父類例項物件,則子類的__proto__屬性繼承父類;

function parent()

parent.prototype.say = function()

function child()

child.prototype = new parent()

console.log(new child())

優點:父類的方法得到了復用;

缺點:重寫子類的原型等於父類的乙個例項,如果父類 包含引用型別的屬性,那麼子類所有例項都會共享該屬性;

3,組合繼承:

function parent3()  

function child3() // 父類例項賦值給子類原型

child3.prototype = new parent3();

var p3 = new child3();

var p4 = new child3();

console.log(p3.play, p4.play);

p3.play.push(4);

console.log(p3,p4);

console.log(p3.play, p4.play);

優點:繼承了建構函式繼承和原型鏈繼承的優點,摒棄了缺點,復用了方法,子類又有各自的屬性;

缺點:父類建構函式執行了兩次,子類的原型物件中也有乙份父類的例項屬性,而這些屬性會被子類例項的屬性覆蓋掉,也存在資源浪費;

4,組合繼承的優化一;

function parent()

function child() // 將父類的原型指向子類的原型

child.prototype = parent.prototype

var c1 = new child()

var c2 = new child()

console.log(c1,c2)

instanceof 和 constructor 都是用來判斷乙個例項物件是不是這個建構函式的例項的。 不同點是:用constructor 比instanceof 更嚴謹,例如如果 a 繼承 b,b 繼承 c,a 生成的例項物件,用 instanceof 判斷與 a、b、c 的關係,都是 true。所以無法區分這 個到底是 a、b、c 誰生成的例項。而constructor 是原型物件的乙個屬性,並且這個屬 性的值是指向建立當前例項的物件的。

5,組合繼承的優化2---寄生組合繼承

function parent5() 

function child5()

child5.prototype = object.create(parent5.prototype);

child5.prototype.constructor = child5;

var p7 = new child5();

var p8 = new child5();

console.log(p7, p8);

console.log(p7.constructor);

組合繼承的缺點就是在繼承父類方法的時候呼叫了父類建構函式,從而造成記憶體浪費,並且找不到例項物件真正的 constructor 。

那在復用父類方法的時候,使用object.create方法也可以達到目的,沒有呼叫父類建構函式,並將子類的 prototype.constructor 屬性賦值為自己本身,則問題完美解決。

es6: 中的繼承:class之間通過使用extends關鍵字實現繼承,子類必須在constructor方法中呼叫super;

ES5,ES6中的繼承

es5中的繼承 1,借助建構函式實現繼承 只能實現部分繼承 原理 通過call 函式改變this指向,將父類屬性掛載到子類例項中 function parent function child console.log new child 總結 優點 只呼叫一次父類的建構函式,避免了在子類原型中建立不必...

es5 es6 繼承總結

一 原型鏈繼承 原型鏈繼承的原理 直接讓子類的原型物件指向父類例項,當子類例項找不到對應的屬性和方法時,就會往它的原型物件,也就是父類例項上找,從而實現對父類的屬性和方法的繼承。父類 function fat 父類上的原型方法 fat.prototype.getname function 子類 fu...

ES5 ES6 實現繼承

function parent value parent.prototype.getvalue function function child value child.prototype new parent const child new child 1 child.getvalue 1我們來研究...