JavaScript的寄生組合式繼承
阿新 • • 發佈:2019-02-14
寄生組合式繼承示例
第一篇部落格,留個紀念
//父類建構函式
function Super(name){
this.name = name;
this.funcName = "Super";
this.func = "super";
}
Super.prototype.sayName = function (){ alert(this.name); }
Super.prototype.sayFuncName = function (){ alert(this.funcName); }
//子類建構函式
function Sub(name,age){
Super.call(this ,name);
this.age = age;
this.funcName = "Sub";
}
//繼承函式
function inheritPrototype(Sub,Super){
//中間例項化物件
var a = Object(Super.prototype);
//重寫該物件的建構函式指標,指向Sub函式
a.constructor = Sub;
//Sub的原型指向例項化物件a
Sub.prototype = a;
}
//呼叫繼承函式,實現原型鏈構造
inheritPrototype(Sub,Super);
/*
----------一定要在呼叫繼承函式之後新增,如果放在繼承函式之前,隨著原型的替換,函式會undefined。----------
*/
//新增子類方法
Sub.prototype.sayAge = function (){ alert(this.age); }
Sub.prototype.sayFuncName = function (){ alert(this.funcName); }
//測試程式碼
var subTest = new Sub("lulu",20);
subTest.sayName(); //lulu
subTest.sayAge(); //20
subTest.sayFuncName(); //Sub
alert(subTest.func); //super