JS中的继承

大家都知道js中没有真正意义上的继承,但是我们可以通过js中的一些方法变通一下来实现继承

1.原型链继承(很少用):

特点:重写原型对象,父类原型对象上的属性和方法都会被子类继承
问题:1.父类中的实例属性一旦赋值给子类的原型属性,此时这些属性都属于子类的共享属性,在父类中定义的实例引用类型的属性,一旦被修改,其他子类的实例也会被修改
2.实例化子类型的时候,不能向父类型的构造函数传参

构造函数继承(经典继承或伪类继承,很少用):在子类的构造函数内部调用父类的构造函数,在子类构造函数内部间接调用(call(),apply(),bind())父类的构造函数

JS中的继承
原理:改变父类中的this指向
优点:仅仅是把父类中的实例属性当做子类的实例属性,并且还能传参
缺点:父类定义的共享方法不能被子类所继承下来

组合模式

JS中的继承
特点:结合了原型链继承和借用构造函数继承的优点
原型链继承:公有的方法能被继承下来
借用构造函数继承:实例属性能被子类继承下来
问题:无论在什么情况下,都会调用父类构造函数两次,一次是是我们初始化子类的原型对象的时候,另一次,在子类构造函数内部调用父类的构造函数

寄生组合式继承(开发过程中使用最广泛的一种继承模式)

原理:var b = Object.creat(a)
将a对象作为b实例的原型对象
把子类的原型对象指向了父类的原型对象
Dog.prototype=Object.create(Animal.prototype)JS中的继承

多重继承:一个对象同时继承多个对象

在js中多重继承概念是不存在,但可以通过变通方法实现
通过Object.assign(targetObj, copyObj);
将copyObj中的属性和方法copy到targetObj中

当然在最新出的ES6中,官方增加了extends关键字,用extends关键字就可以向Java一样很轻松的实现继承。这是我以前看得某位大佬的ES6的文档总结链接,里边写的非常清楚http://es6.ruanyifeng.com/#docs/class

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-29
  • 2022-12-23
  • 2021-12-30
  • 2021-05-18
猜你喜欢
  • 2022-12-23
  • 2021-12-21
  • 2022-02-20
相关资源
相似解决方案