菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
297
0

JS继承

原创
05/13 14:22
阅读数 37874

JS继承有很多方式,常见的有原型继承、构造继承、组合继承和寄生组合继承等

1.原型继承。

  原型继承通过父元素实例赋值给子元素的原型对象。

  缺点:所有的子类实例共享一个原型,一个改变,其他也会改变,一般不单独使用。

//原型继承
function Parent(){
  //...
}
function Son(){
  //...
}
Son.prototype = new Parent()

2.构造继承

  构造继承通过使用call函数,将父类的this指向改变到子类的this,通过这种方式,继承父类的属性。

  缺点:方法在子类的构造函数内,每个子类实例不能共享,需要每次创建,浪费资源

//构造继承
function Parent(){
  //...
}
function Son(){
  Parent.call(this)
  //...
}

3.组合继承

  组合继承借鉴了原型继承和构造继承的优势,通过原型来继承方法,通过构造来继承属性。最常用的继承方式

  缺点:父类被引用了两次,浪费资源

//组合继承
function Parent(){
  //...
}
function Son(){
  Parent.call(this)
  //...
}
Son.prototype = new Parent()

4.寄生组合继承

  寄生组合继承和组合继承类似,只是通过使用Object.create()方法来创建空的父类实例,解决了父类被引用两次的缺点

//寄生组合继承
function Parent(){
  //...
}
function Son(){
  Parent.call(this)
  //...
}
Son.prototype = Object.create(Parent, {
  constructor:{
    value: Son
  }
})

相关热门文章

发表评论

0/200
297 点赞
0 评论
收藏