Javascript实现继承的几种方式

来源:互联网 发布:域名所有权查询 编辑:程序博客网 时间:2024/05/18 12:03


    1. 1.原型链实现继承:
        1. 核心: 将父类的实例作为子类的原型;
        2. 特点:

          1. 非常纯粹的继承关系,实例是子类的实例,也是父类的实例
          2. 父类新增原型方法/原型属性,子类都能访问到
          3. 简单,易于实现
        3. 缺点:

          1. 要想为子类新增属性和方法,必须要在new Animal()这样的语句之后执行,不能放到构造器中
          2. 无法实现多继承
          3. 来自原型对象的引用属性是所有实例共享的(详细请看附录代码: 示例1)
          4. 创建子类实例时,无法向父类构造函数传参
    2. 2.混入继承(拷贝继承)
        1. 特点:

          1. 支持多继承
        2. 缺点:

          1. 效率较低,内存占用高(因为要拷贝父类的属性)
          2. 无法获取父类不可枚举的方法(不可枚举方法,不能使用for in 访问到)
    3. 3.原型式继承(经典继承)
                  1. 总结:创建一个新的对象,让新的对象可以继承自指定的对象,从而这个新的对象及可以访问到自己的属性,也可以访问到指定的对象属性;
                  2. 现代浏览器中:Object.create()实现了原型式继承
                  3. ES5(js语言规范的第五个版本)--Object.create()--->9以下不支持
        1. 4.借用构造函数实现继承
                1. 核心:使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类(没用到原型);
                2. 特点:

                  1. 解决了1中,子类实例共享父类引用属性的问题
                  2. 创建子类实例时,可以向父类传递参数
                  3. 可以实现多继承(call多个父类对象)
                3. 缺点:

                  1. 实例并不是父类的实例,只是子类的实例
                  2. 只能继承父类的实例属性和方法,不能继承原型属性/方法
                  3. 无法实现函数复用,每个子类都有父类实例函数的副本,影响性能
            1. 5.组合继承
              1. 核心:通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用
              2. 特点:
                1. 既是子类的实例,也是父类的实例
                2. 不存在引用属性共享问题
                3. 可传参
                4. 函数可复用
              3. 缺点:

                1. 调用了两次父类构造函数,生成了两份实例(子类实例将子类原型上的那份屏蔽了)
              4. 推荐指数:★★★★(仅仅多消耗了一点内存)
0 0
原创粉丝点击