JS继承

作者: CollinHsu | 来源:发表于2017-03-28 15:55 被阅读0次

继承大致分为两类:

           ——基于构造器工作模式 

           ——基于对象模式


1、原型链法(仿传统)——使用原型链模式

      child.prototype = new Parent();(会继承对象的自身属性以及原型链上的属性方法)

提示:可以将方法与属性集中可重用的部分迁移到原型链中,将不可重用的部分设置为对象的自身属性


2、仅从原型链继承——原型拷贝模式,所有的对象将共享一个原型对象

child.prototype = Parent.prototype

提示:该模式构建继承关系时,不需构建对象实例,原型链上的查询也较快.但是子对象对原型的修改会影响父对象


3、临时构造器——借用原型链模式

function extend(Child,Parent){

       var F = function(){}

       F.prototype = Parent.prototype

       Child.prototype = new F()

      Child.prototype.constructor = Child

      Child.uber = Parent    //方便子对象访问父对象的属性

}

提示:只继承父对象的原型属性,对于自身属性不继承(即this值中的属性)


4、原型属性拷贝法——基于构造器模式(拷贝属性模式,使用原型模式)

function extend2(Child,Parent){

         var c = Child.prototype

         var p = Parent.prototype

         for(var i in p){

             c[i] = p[i]

        }

        c.uber = p

}


5、全属性拷贝法(浅拷贝)——基于对象模式

function extendCopy(Parent){

       var c = {}

       for(var i in Parent){

            c[i] = Parent[i]

     }

    c.uber = Parent

    return c

}

提示:不能作用于原型属性——属于拷贝模式


6、深拷贝法(同上,在遇到对象类型时重复调用上述函数)

function deepCopy(Parent){

        var c = c || {};

        for(var i in Parent){

                if(typeof p[i] === "object"){

                      c[i] = (p[i].constructor === Array)? [ ] : {}

                       deepCopy(p[i])

                  }else{

                   c[i] = p[i]

                    }

          }

          return c

}

提示:所有对象都是值传递


7、原型继承法——基于对象工作模式(使用原型链)

function object( o ){

     function F(){}

     F.prototype = o

      return new F()

}

提示:直接在对象之间构建继承关系


8、扩展与增强模式——基于对象工作模式(使用原型链模式属性拷贝模式)

function objectPlus(oParent,oChild){

      var n 

      function F(){}

      F.prototype = 0Parent

      n=new F()

    for(var i in oParent){

       n[i] = oParent[i]

   }

      return n

}

提示:一次性完成对象的继承与扩展


9、多重继承——基于对象工作模式(属性拷贝)

function multi(){

     var n = {}, stuff

      for(var j =0;j<arguments.length;j++){

              stuff [ j ] = arguments [ j ]

              for(var i in stuff ){

                      n[ i ]  = stuff [ i ]

                }

       }

        return n

}

提示:会按照父对象的出现顺序依次对它们执行属性拷贝


10、寄生式继承——基于对象(使用原型链)

function parasite(victim){

     var that = object(victim)

      that.more=1     //添加自己属性

     return that

}

提示:执行相应的对象拷贝,并对其扩展


11、构造器借用——基于构造器模式

   function child(){

      Parent.apply(this,arguments)

}

提示:可以只继承父对象的自身属性,也可和方法1中的结合继承原型(便于继承某个对象的具体属性)


12、构造器借用属性拷贝——使用构造器模式、原型链模式拷贝模式

function child(){

Parent.apply(this,arguments)

extend2(child,parent)

}


代码出自《JavaScript面向对象编程》

相关文章

  • Js的继承

    js的继承 @(js)[继承, js, 前端] 组合继承是原性链继承和构造函数继承的合体,它汲取了二者各自的有点,...

  • JS继承

    JS中的继承 许多OO语言都支持两种继承方式:接口继承和实现继承; 因为JS中没有类和接口的概念 , 所以JS不支...

  • #js继承

    js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承)类式继承(构造函数间的继承) 类式继承是...

  • js继承遇到的小问题

    这两天在看js继承方面,它不像OC那种传统的类继承。js继承方式还是挺多的。比如:原型继承、原型冒充、复制继承 原...

  • JS中继承的实现

    JS中继承的实现 #prototype (js原型(prototype)实现继承) 全局的Function对象没有...

  • js继承

    js继承js 继承-简书 原型链实现集继承 上面的代码实现原型链继承最重要的son.prototype=new f...

  • JavaScript 10

    js继承的概念 1.通过原型链方式实现继承(对象间的继承) 2.类式继承(构造函数间的继承) 由于js不像Java...

  • JS继承的实现的几种方式

    前言 JS作为面向对象的弱类型语言,继承也是非常强大的特性之一,那么如何在JS实现继承呢? JS继承的实现方式 既...

  • 2019-03-25 继承

    js中通过原型来实现继承 组合继承:原型继承+借用构造函数继承

  • 继承方式(6种)1.7

    JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待。 JS继承...

网友评论

      本文标题:JS继承

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