说说js最好的继承方式--寄生组合式继承的具体实现

前言

寄生式组合继承,目前相对来说,是最好的一种js继承方式,那我们就简单说说它是怎么实现继承的。

function Parent(name) {
  this.name = name;
  this.eat = () => {
    console.log('吃什么');
  };
}
Parent.prototype.look = () => {
  console.log('看什么');
};
function Child(name) {
  Parent.call(this);
  this.name = name;
}
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;


// let newChild = new Child("DDD");   
// console.log(newChild.name);   // "DDD"
// newChild.eat();   // '吃什么'
// newChild.look();   // '看什么'

实现寄生组合式继承的方式

1-借助构造函数

Parent.call(this)
通过call,执行Parent构造函数,并且让执行构造函数的this指向Child。
所以使得Child拥有了Parent里面this.name = name和 this.eat = () => {}这些静态方法

2-借助原型链的形式继承

首先,Object.create(obj)的本质就是:
创建一个新对象,新对象的__proto__ = obj
所以,Child.prototype = Object.create(Parent.prototype),我们把Parent的原型拷贝了一份给Child的原型。相对于一个副本,实现了通过原型链,继承原型上的属性和方法
(创建一个副本的好处:Child.prototype添加了属性和方法,也只会挂在这个副本的prototype上,并不会影响到Parent的prototype)
之后通过Child.prototype.constructor = Child; 为Child.prototype添加constructor,弥补因为重写原型而失去的constructor属性

寄生组合式继承的优点

可以继承父类原型对象和实例上的属性和方法,只需要调用一次父类构造函数,Child可以向Parent传参,父类方法可以复用

总结

寄生组合式继承通过构造函数来继承静态属性,通过创建副本的方式来继承原型链上的属性

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值