面向对象

2020-09-24  本文已影响0人  Augenstern___
  1. https://blog.csdn.net/sugar_no1/article/details/86366714
  1. https://www.cnblogs.com/coolzone/p/6589090.html

三种继承方式:

原型链继承:

image.png

将父类的实例作为子类的原型,父类的属性包括新增属性子类都可以访问到,
此种继承优点:
1.构造简单,实例是子类的实例,也是父类的实例。
2.子类能访问到父类的属性包括新增属性(上面有提到)
缺点:
1,无法实现多继承
2.书写麻烦,新增的属性必须在 new parent() 实例后面添加,不能放在构造器里面添加。
3.创建子类实例时,无法向父类构造函数传参。

构造继承:

image.png

使用.call继承父类(复制父类)的属性方法到子类。
优点:1.使用.call可继承多个父类,实现多继承。
2.创建子类实例时,可像父类传递参数(因为子类继承到了父类的属性方法了,自然也可以通过子类实例传递参数)。
3.解决了原型链继承中,子类实例共享父类引用属性的问题。

组合继承:

image.png

核心:通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用.
优点:
1.弥补了方式2的缺陷,可以继承实例属性/方法,也可以继承原型属性/方法
2.既是子类的实例,也是父类的实例
3.不存在引用属性共享问题
4,.可传参
5.函数可复用
缺点:调用了两次父类构造函数,生成了两份实例(子类实例将子类原型上的那份屏蔽了)

.call 和 .apply 的
区别
传参不同:fun.call(thisobj,arg1,arg2)针对确定的参数,使用.call,参数使用逗号分隔。
fun.apply(thisobj,[arg1,arg2])针对不确定的参数,使用.apply传递,参数用数组形式传递。
作用
改变this指向,.call和.apply的this默认指向当前函数,第一个参数传入将会把默认的this指向给替换掉,将this指向改变为第一个参数(比如对象);


image.png
上一篇 下一篇

猜你喜欢

热点阅读