- 共享原型
第一版:
function inherit(Target,Origin){
Target.prototype = Origin.prototype;
}
Father.prototype.lastName = "Li";
function Father(){}
function Son(){}
//不用原型链的方式
//原型的引用赋值给原型,实现多个构造函数继承一个原型
Son.prototype = Father.prototype;
var son = new Son();
第二版:
function inherit(Target,Origin){
Target.prototype = Origin.prototype;
}
Father.prototype.lastName = "Li";
function Father(){}
function Son(){}
inherit(Son,Father);//一定是先继承,后用
//不用原型链的方式
//原型的引用赋值给原型,实现多个构造函数继承一个原型
// Son.prototype = Father.prototype;
var son = new Son();//构建对象必须是在inherit之后,注意位置
产生问题:如果son添加私有属性,father的也会添加私有属性
第三版:
function inherit(Target,Origin){
F.prototype = Origin.prototype;
function F(){}
Target.prototype = new F();
}
Father.prototype.lastName = 'li';
function Father(){}
function Son(){}
inherit(Son,Father);
var son = new Son();
var father = new Father();
4. 圣杯模式
第四版:
function inherit(Target,Origin){
function F(){}
F.prototype = Origin.prototype;//先继承在使用,注意代码位置
Target.prototype = new F();//先继承在使用,注意代码位置
Target.prototype.constructor = Target;//归位——让son.constructor == Son
Target.prototype.uber = Origin.prototype;//存储实际继承自谁
}
Father.prototype.lastName = 'li';
function Father(){}
function Son(){}
inherit(Son,Father);
var son = new Son();
var father = new Father();
第五版:
Father.prototype.lastName = 'li';
function Father(){}
function Son(){}
var inherit = (function(){//立即执行函数,用完即删
var F = function (){};//变量私有化
return function(Target,Origin){//形成闭包
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constructor = Target;
Target.prototype.uber = Origin.prototype;
}
}())
inherit(Son,Father);
var son = new Son();
var father = new Father();