美文网首页
JS 中继承实现的几种方式

JS 中继承实现的几种方式

作者: 未路过 | 来源:发表于2022-09-11 14:15 被阅读0次

    JavaScript想实现继承的目的:重复利用另外一个对象的属性和方法

    1.原型链继承

    将父类(Person)的实例(p对象)作为子类(Student)的原型prototype。
    优点
    1.父类本身的方法/属性和prototype里面的属性和方法,子类都能够访问。
    2.原型链继承简单易于实现。
    缺点
    1.父类的属性(父类本身或者prototype里面的)被所有子类实例共享。所有子类的实例都使用同一个属性。
    2.因为无法向父类构造函数传参数,子类的实例没有办法使用父类的实例属性。(有,但是是公用的)


    image.png

    2.组合借用构造函数继承

    在子类构造函数内部使用call方法,向构造继承可以向父类传递参数,即复制父类本身的属性和方法给子类。
    缺点:1.借用构造函数继承最大的问题就是无论在什么情况下,都会调用两次父类构造函数。
    第一次是在创建父类的实例,也就是子类的prototype的时候,第二次是在子类构造函数内部,也就是每次创建子类实例的时候。
    2.所有的子类实例会拥有两份父类的属性。
    一份在当前的实例自己里面(也就是stu1本身的),另一份在子类对应的原型对象中(也就是stu1.proto里面),里面都有age,friends,name属性; 当然,这两份属性我们无需担心访问出现问题,因为默认一定是访问实例本身这一部分的;

    image.png

    3 寄生组合式继承

    使用了call函数和原型链。
    不再使用父类的实例作为子类的prototype。而是创建出一个空对象,作为子类的prototype,但是这个空对象的proto是指向父类的prototype。
    放弃使用父类的实例作为子类的prototype是因为我们在子类中使用了call这个函数,就意味着我们将父类中的属性和方法复制到了一份在子类实例中。所以父类本身里面的内容,我们不再使用。我们就只考虑怎么使用父类prototype中的方法就可以了。

    image.png

    相关文章

      网友评论

          本文标题:JS 中继承实现的几种方式

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