segmentfault官方|ES5 继承( 四 )
由图可见s的原型链上依然有name跟colors属性 。 这也是不需要的 。 怎么解决这两个问题?
父类的属性是需要的 , 父类的原型上的方法是需要的 , 重复的父类属性不需要 , 由上图可见重复的父类属性是由于实例化父类给子类原型造成的 , 我们不去实例化父类 , 而是将父类的原型传递给子类的原型就行了 , 结合原型式继承特点可以做到
functionSuperType(name) {
this.name = name;
this.colors = [ "red", "blue", "green"];
}
SuperType.prototype.sayName = function{
console.log(this.name);
};
functionSubType(name, age) {
SuperType.call(this, name); // 将父类的属性绑定到SubType实例中
this.age = age;
}
SubType.prototype = Object.create(SuperType.prototype);
// 将子类的prototype关联到父类的prototype上
SubType.prototype.sayAge = function{
console.log(this.age);
};
使用Object.create解决了父类构造函数调用两次 , 父类属性重复的问题 , 但是子类constructor并没有出现在原型链中
本文插图
下面做出改造:
SubType.prototype = Object.create(SuperType.prototype, {
constructor: {
value: SubType, // 修正 constructor 指向
writable: true,
configurable: true,
},
});
本文插图
SuperType的constructor出现了 , 其实constructor并没什么用 , 只是个约定罢了,参考贺老的解释Java 中对象的 constructor 属性的作用是什么?(https://www.zhihu.com/question/19951896/answer/13457869)
instanceof操作符和 isPrototypeOf 方法正常有效 。 寄生式组合继承可以
算是引用类型继承的最佳模式
推荐阅读
- 职业教育|DNF:官方又出好消息了!转职书使用有惊喜,外传职业哭天喊地
- 职业年金|企业年金或职业年金可以退休时一次性领取吗?官方解答
- 官方旗舰店|晚了!这些冬奥周边已被抢断货,还能如何下手?
- 年终奖|再见,996!马云口中的福报,被官方定性违法
- 博物馆|博物馆帮您“鉴宝”!官方多“掌眼”,文物收藏者就能少走眼
- 剑网3|闭眼也能打上13段?剑网三历代新爹告诉你:什么叫官方开挂!
- 阿拉德|DNF:阿拉德最卑微职业,官方各种蹭热度,但就是不给加强
- 职业教育|官方下发通知,职本学位效力=普本,网友直言“搞了个四本?”
- 分流|初中生迎来好消息,官方推出“分配生”制度,有机会避开普职分流
- 莫言|莫言支持取消普职比分流,表示对晚熟男生不公平,官方给了回应
