美文网首页
面向对象

面向对象

作者: Augenstern___ | 来源:发表于2020-09-24 18:48 被阅读0次
    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

    相关文章

      网友评论

          本文标题:面向对象

          本文链接:https://www.haomeiwen.com/subject/neuoyktx.html