• js继承的几种实现方式


    1.以原型链的方式实现继承

    原理:利用原型让一个引用类型继承另一个引用类型的属性和方法

    缺点:在包含有引用类型的数据时,会被所有的实例对象所分享,容易造成修改的混乱,还有就是在创建子类型的时候不能向超类型传递参数。

    2.借用构造函数

    原理:通过在子类型的函数中调用超类型的构造函数来实现。

    优点:解决了不能向超类型传递参数的缺点。

    缺点:无法实现函数方法的复用,并且超类型圆形定义的方法也没有办法访问到。

    function SuperType(){
        this.colors = ["red", "blue", "green"];
    }
    
    function SubType(){
        //继承了 SuperType
        SuperType.call(this);
    }
    
    var instance1 = new SubType();
    instance1.colors.push("black");
    console.log(instance1.colors);  //"red,blue,green,black"
    
    var instance2 = new SubType();
    console.log(instance2.colors);  //"red,blue,green"

    3.组合继承

    原理:将原型链和借用构造函数组合起来一起使用。通过借用构造函数的方式来实现类型的属性的继承,通过将子类型的原型设置为超类型的实例来实现方法的继承。

    优点:解决了以上2中模式单独使用时存在的问题。

    缺点:由于以超类型的来作为子类型的原型,所以调用了两次超类型的构造函数,造成了子类型的原型中多了很多不必要的属性。

    4.原型式继承

    原理:基于已有的对象来创建新的对象---(向函数中传入一个对象,然后返回一个以这个对象为原型的对象,不是为了实现创造一种新的类型,只是对某个对象实现一种简单继承)

    缺点:与原型链方式相同

    5.寄生式继承

    原理:创建一个用于封装继承过程的函数,通过传入一个对象,然后复制一个对象的副本,然后对象进行扩展,最后返回这个对象。

    优点:对一个简单对象实现继承,如果这个对象不是我们的自定义类型时。

    缺点:没有办法实现函数的复用。

    6.寄生式组合继承

    原理:使用超类型的原型的副本来作为子类型的原型。避免创建不必要的属性。

    缺点:使用超类型的实例作为子类型的原型,导致添加了不必要的原型属性

    先整理一部分,后续添加

  • 相关阅读:
    /etc/fstab 文件如何填写(转)
    在linux下PHP和Mysql环境搞事情
    nginx 添加的配置信息
    查看服务器硬件信息
    Centos下的SVN搭建
    20170413B端业务访问故障排查思路
    快速搭建BIND服务,并实现解析
    零基础学python-19.1 列表解析与序列映射函数map
    零基础学python-18.10 函数式编程工具:filter和reduce
    零基础学python-18.9 序列映射函数:map
  • 原文地址:https://www.cnblogs.com/susu2020/p/12518508.html
Copyright © 2020-2023  润新知