寄生式继承是与原型式继承紧密相关,先回忆一下object(o)函数:
function object(o){
function F(){}
F.prototype = o;
return new F();
}
寄生式函数是什么样的:①创建一个仅用于封装继承过程的函数,②该函数在内部以某种方式来增强对象,③返回对象。以下代码示范了寄生式继承模式。
function createAnother(original) {
var clone = object(original); //通过调用函数创建一个新对象
clone.sayHi = function () { //以某种方式来增强这个对象
alert("hi");
};
return clone; //返回这个对象
}
可以像下面这样来使用 createAnother() 函数
var person = {
name: "Nicholas",
friends: ["Shelby", "Court", "Van"]
};
var anotherPerson = createAnother(person);
anotherPerson.sayHi(); //"hi"
新对象不仅具有 person的所有属性和方法,而且还有自己的 sayHi() 方法。
好处:在主要考虑对象而不是自定义类型和构造函数的情况下有用。
问题:使用寄生式继承来为对象添加函数,会由于不能做到函数复用而降低效率。