js的继承方式

js继承

  • 原型链继承
  • 构造函数继承
    在这里插入图片描述
  • 组合继承
    在这里插入图片描述
  • 原型式继承
  • 寄生式继承
    在这里插入图片描述
  • 寄生组合式继承
    在这里插入图片描述
  • 混入方式继承多个对象
    -
  • es6的类继承extends
    在这里插入图片描述
  • ES5继承和ES6继承的区别

摘自

  • ES5的继承实质上是先创建子类的实例对象,然后再将父类的方法添加到this上(Parent.call(this)).

  • ES6的继承有所不同,实质上是先创建父类的实例对象this,然后再用子类的构造函数修改this。因为子类没有自己的this对象,所以必须先调用父类的super()方法,否则新建实例报错

总结一下

  • 原型链的继承顺着链找,引用变量会污染,不能给父类传参
  • 构造函数的方式,实例和子类构造函数都保存着相同的属性名,可以传参,但是实例只能拿到父类构造函数里的方法,父类原型里的不能用,因为不能沿着原型链去找
  • 组合继承,相当于实例的属性用构造函数的方式构建,同时修改子类原型为父类的实例,能够实现自己保存属性,也可以沿着原型链去找,但是调用两次父类构造函数
  • 原型式的继承,subtype.__proto__==supertype,可以沿着原型链找,但是会引用类型污染,不能传参
  • 寄生继承的方式,就是在原型式上subtype挂上自己的方法,和原型式大差不差
  • 寄生组合继承方式,在组合继承的方式上,子类和实例都会调用父类,在寄生组合中,子类和父类中间加上一层空对象propotype,使得
    subtype.prototype==prototype.__proto__==supertype.prototype
    subtype==prototype.constructor,使得子类不用调用父类,实例调用就行,减少一次父类调用
  • 混入方式继承多个对象,subtype.__proto__==supertype.prototype,其他要继承的属性直接拷贝,但是用Object.assgin()会覆盖
  • es6的extends就是寄生组合的封装实现

es5和es6的继承区别

  • es5的先创建子类的实例,然后挂到父类上,添加父类属性和方法
  • es6的用extends的,子类里面先constructor父类,创建父类的实例对象,然后接着加上子类的属性和方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值