/**
* 寄生组合式继承:
* 使用寄生式继承来继承超类型的原型,然后将结果指定给子类型的原型
* 优点:高效率,它只调用了一次Supertype构造函数,避免了在prototype上面创建不必要的多余属性,
* 同时,原型链还能保持不变
* 正常使用instanceof 和isPrototypeOf()
* 普遍认为寄生组合式继承是引用类型最理想的继承方式
*/
function object(o){
function F(){} //创建临时构造函数
F.prototype = o; //将传入对象作为构造函数的原型
return new F(); //返回类型的新实例
}
function inheritPrototype(subType,superType){
var prototype = object (superType.prototype); //创建对象
prototype.constructor = subType; //增强对象
subType.prototype = prototype; //指定对象
}
function SuperType(name){
this.colors = ["red","bule","green"];
this.property = true;
this.name = name;
}
SuperType.prototype.getSuperValue = function(){
return this.property;
}
SuperType.prototype.sayName = function(){
console.log(this.name);
}
function SubType(name,age){
this.subproperty = false;
SuperType.call(this,name); //另一种继承方式,构造函数
this.age = age;
}
//SubType.prototype = new SuperType(); //继承语法 ,原型继承
// SubType.prototype.constructor = SubType;
inheritPrototype(SubType, SuperType);
SubType.prototype.sayColor = function(){
// console.log(this.colors);
return this.colors;
}
SubType.prototype.getSubValue = function() { //通过原型链实现继承时,不能使用创建字面量创建原型方法,
// 这样做 会重写原型链
return this.subproperty;
}
SubType.prototype.getSuperValue = function(){
return false;
}
var person1= new SubType();
console.log(person1.sayColor());
JavaScript继承,寄生组合式继承
最新推荐文章于 2024-03-01 16:51:46 发布