寄生組合式繼承示例
第一篇博客,留個紀念
//父類構造函數
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