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我們來研究...