寄生组合式继承

// 寄生组合继承

function inheritPrototype(Sub,Super) {
    // Object.create 可以将subPrototype的原型(__proto__) 设置成 Super的原型对象(prototype);
    var subPrototype = Object.create(Super.prototype);
    // 因为Object.prototype.constructor会返回对象本身,所以这里设置为Sub本身;
    subPrototype.constructor = Sub;

    // 这里将Sub的原型对象(prototype)设置成subPrototype,实现Sub对Super基于原型链的继承;
    Sub.prototype = subPrototype;

}

// Eg:

function Super(name) {
    this.name = name;
}
Super.prototype.show = function() {
    console.log(this.name);
}
function Sub() {
    // 这里 Sub 将自己的上下文传给Super并执行,真可谓一个懒字了得;
    Super.apply(this,arguments);
}

// 调用寄生组合式继承;
inheritPrototype(Sub,Super);

var instance = new Sub('北有极光');

// instance 本身并没有show方法,
// 但是通过inheritPrototype函数把instance对象的原型的原型设置成了Super的原型对象,
// 所以,基于JavaScript 原型链的特性,实际上是这样调用的 instance.__proto__.__proto__.show();
// 打印一下便知道了;
instance.show();

console.log(
    instance.__proto__.__proto__ === Super.prototype
);



更详细的说明

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容