美文网首页
JS继承的六种方式

JS继承的六种方式

作者: lmmy123 | 来源:发表于2018-10-15 20:18 被阅读9次

    一.构造继承

    1.基本思想

    通过使用apply,call方法可以在新创建的对象上执行构造函数,用父类的构造函数实现子类的实例

    2.具体实现

    function sub(){

        Super.call(this); // 调用父类

    }

    3.优缺点

    ——优点: 简单明了,直接继承构造函数的属性和方法

    ——缺点: 无法继承原型链上的属性和方法

    二.原型链继承

    1.基本思想

    利用原型链来实现继承

    2.具体实现

    function Sub(){}

    Sub.prototype = new Super()

    Sub.prototype.constructor = Sub

    3.优缺点

    ——优点: 简单明了,实例是子类的实例,也是父类的实例

    ——缺点: 所有子类的实例的原型都共享同一个超类实例的属性和方法

    三.组合继承

    1.基本思想

    结合构造函数和原型链来实现继承

    2.具体实现

    function Sub(){

            Super.call(this)

    }

    Sub.prototype = new Super()

    Sub.prototype.constructor = Sub


    3.优缺点

    ——优点: 解决了构造函数和原型链继承的问题

    ——缺点: 事件上子类上会拥有超类的两份属性,只是子类的属性覆盖了超类的属性

    四.原型式继承

    1.基本思想

    通过Object.create(obj)实现

    2.具体实现

    if( typeof Object.prototype.create != 'function'  ){

            Object.prototype.create = function(obj){

                    function F(){}

                    F.prototype = obj;

                    return new F()

    }}

    3.优缺点

    ——优点: 直接通过对象生成一个继承该对象的对象

    ——缺点: 没有类的概念

    五.寄生式继承

    1.基本思想

    创建一个仅仅用于封装继承过程的函数,然后在内部以某种方式增强对象,最后返回对象

    2.具体实现

    if( typeof Object.prototype.create != 'function'  ){        

                    Object.prototype.create = function(obj){               

                            function F(){}                

                            F.prototype = obj;                

                            return new F()

    }}

    function createSubOobj(superInstance){

            var clone = Object.create(superInstance)

            return clone

    }

    3.优缺点

    ——优点: 原型式继承的一种拓展

    ——缺点: 还是没有类的概念

    六.寄生组合式继承

    1.基本思想

    集合寄生式继承和组合式继承,完美实现不带两份超类属性的继承方式

    2.具体实现

    function inheritPrototype(Super,Sub){

            var superProtoClone = Object.create(Super.prototype)

            superProtoClone.constructor = Sub

            Sub.prototype = Super

    }

    function Sub(){

        Super.call(this)

    }

    inheritPrototype(Super,Sub)


    3.优缺点

    ——优点: 完美实现不带两份超类属性的继承方式

    ——缺点: 太过繁琐


    原文链接:https://blog.csdn.net/caijixin/article/details/78295676

    相关文章

      网友评论

          本文标题:JS继承的六种方式

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