javascript 高级程序设计 8.3.5 寄生式继承

45 阅读1分钟

寄生式继承:创建一个实现继承的函数,在里面以某种方式增强对象.

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.

寄生式继承适用于不在乎类型和构造函数的场景,主要关注对象的情况.

寄生式继承给对象添加函数,会导致函数难以复用,每次都会进行新的调用.