6.3.5 寄生式继承
寄生式继承的思路与寄生构造函数和工厂模式类似。即创建一个仅用于封装继承过程的函数。该函数在内部以某种方式来增强对象,最后再像真的是它做了所有工作一样返回对象。
以下代码示范了寄生式继承模式:
function createAnother(original){
var clone=Object(original);//通过调用函数创建一个新对象
clone.sayHi=function(){//以某种方式来增强这个对象
alert("hi");
};
return clone;//返回这个对象
}
var person={
name:"kathy",
friends:["Rainbow","Payne"],
};
var anotherPerson=createAnother(person);
anotherPerson.sayHi();//HI
例子中的代码基于person返回了一个新对象——anotherPerson。新对象不仅具有person的所有属性,而且还有自己的sayHi()方法。
6.3.5 寄生组合式继承
组合继承是Javascript最常用的继承模式;不过它也有自己的不足。
组合继承最大的问题就是无论什么情况下,都会调用两次超类型构造函数:一次是在创建子类型原型的时候,另一次是在子类型构造函数内部。
组合继承的例子:
function SuperType(name){
this.name = name;
this.colors=["red","blue","green"];
}
SuperType.prototype.sayName = function(){
alert(this.name);
};
function SubType(name,age){
SuperType.call(this.name);// 第二次调用SuperType()
this.age = age;
}
SubType.prototype = new SuperType();// 第一次调用SuperType()
SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function(){
alert(this.age);
};
网友评论