// 寄生组合继承
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
);
寄生组合式继承
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 寄生式继承 基本思路 创建一个仅用于封装继承过程的函数,该函数在内部以某种方式来增强对象,最后再像真的是它做了所有...
- 通过借用构造函数来击沉属性,通过原型链的混成形式来继承方法。不必为了指定子类型的原型而调用超类型的构造函数,我们只...