寄生式继承:创建一个实现继承的函数,在里面以某种方式增强对象.
function createAnother(original) {
let clone = Object.create(original)
clone.sayHi = function() {
console.log('hi!')
}
return clone
}
let person = {
name: '张三',
color: ['red','green']
}
let person1 = createAnother(person)
person1.sayHi() // 'hi!'
createAnother()接收一个对象,这个对象是基准对象,通过原型式继承,成为clone的原型,然后clone添加了自定义方法sayHi(),最后返回clone对象.
这么做,所有通过createAnother()方法返回的对象,里面都会寄生一个叫sayHi()的函数可供调用.而其他属性就来自于传入的对象了.并且通过同一个传入对象创建的不同对象,也会共享其中的引用数据类型,例如color.
寄生式继承适用于不在乎类型和构造函数的场景,主要关注对象的情况.
寄生式继承给对象添加函数,会导致函数难以复用,每次都会进行新的调用.