寄生式(parasitic)继承是与原型式继承紧密相关的一种思路.
* 思路与寄生构造函数个工厂模式类似,即创建一个仅用于封装继承过程的函数,
* 该函数在内部以某种方式来增强对象,
* 最后再像真的是它做了所有工作一样返回对象.
function createAnother(original) {
var clone = Object(original);//通过调用函数创建一个新对象
clone.sayHi = function () {//以某种方式来增强这个对象
console.log('Hi '+this.name);
};
return clone;//返回这个对象
}
//使用这个函数
var person = {
name : 'Hongbin',
friends : ['A','B','c']
};
var anotherPerson = createAnother(person);
anotherPerson.sayHi();
var person2 = {
name:'666',
age: 20
};
var anotherPerson2 = createAnother(person2);
anotherPerson2.sayHi();
console.log(anotherPerson2);
console.log(anotherPerson);
这个方法实现:
* 定义一个clone,clone最开始是一个空的对象,通过传入一个存在的对象,来当做自己的,寄生之意源自于此,寄生在已有的对象上.
*然后给他个方法.用以增强它,最后返回这个clone,clone就有了自己的方法,和属性,变相的继承.
*
* 适用条件:
* 在主要考虑对象而不是自定义类型和构造函数的情况下,寄生式继承也是一种有用的模式.
* var clone = Object(original); 这里的Object不是必须的,任何能够返回新对象额函数都适用.