//寄生组合式继承就是为了降低调用父类构造函数的开销而出现的
//基本思路是: 不必为了指定子类型的原型而调用超类型的构造函数
function extend(subclass,superclass){
var f = function(){};
f.prototype = superclass.prototype;
//subclass.prototype =superclass.prtotype相当于原型共享而非继承
subclass.prototype = new f();//继承superclass的原型
subclass.prototype.constructor = subclass;//原型重写,手动绑定
subclass.superclass = superclass.prototype;//将superclass.prototype缓存起来,方便后续访问
if(superclass.prototype.constructor == object.prototype.constructor){
superclass.prototype.constructor = superclass;
}
}
function father(name){
this.name = name;
this.colors = ["red","pink","green"];
}
father.prototype.sayname = function(){
console.log(this.name);
}
function son(name,age){
father.call(this,name);//使用构造函数进行实例属性的继承,调用第一次
this.age = age;
}
extend(son,father);//
son.prototype.constructor = son;//重新指向son
son.prototype.sayage = function(){
console.log(this.age);
}
var instance1 = new son("lisi",12);
instance1.colors.push("brown");
console.log(instance1.colors);
instance1.sayname();
instance1.sayage();
var instance2 = new son("hah",22);
instance2.colors.push("black");
console.log(instance2.colors);
instance2.sayname();
instance2.sayage();
网友评论