美文网首页
JS寄生组合式继承

JS寄生组合式继承

作者: 8becbd689309 | 来源:发表于2018-01-10 12:19 被阅读11次

解析一下寄生组合式继承使用的原因。因为其他的继承方式要么就是函数无法复用(就是每创建一个新的实例,创建其中的方法的时候,就相当于又创建了一个新的对象,但是这种方法创建的机制其实是一样的,属性时简单值的就无所谓),因此用原型来继承要用的方法的话,就不必每次创建方法了,只需要在使用的时候搜索到原型上的此种方法就可以使用了。

因此用构造函数加原型的模式来继承,一个让实例继承后有自己独立的属性,作修改不会影响其他的值,然后有共有的属性和方法,可以做到函数复用。(但是在重写原型的时候属性方法都做了继承,只是同时在创建新对象的时候又重新写了一遍现在原型中有的属性,因此修改的话实际修改的是新实例已经有的属性,但是如果删除了在写就会改变原型的属性了,这是为什么实例也有各自独立属性的原因)


function Sub(name,age){ 

Sup.call(this.name); //这里会在创建新的实例的时候写入一遍Sup()构造函数里所拥有的属性和方法

this.age=age;}

Sub.prototype=new Sup();//然后重写原型,原型上也有这些属性和方法

重写原型继承他的方法和属性,但是上方在子类型构造函数我们调用超类型构造函数重写了他的属性,因此在Sub()的新实例中就有了Sup()已经有的属性了,所以修改实例中的某一个属性并不会影响到Sup()本身。而其实要这么做的原因在于Sup.prototype.say=function(){//代码}这一行代码, 这样方法就可以通过Sup的原型传递给新的实例了,不用写在Sup构造函数里,但完成了函数的复用,也让实例有了自己的属性和方法。

但是这时问题又来了,每次都要调用两次超类型构造函数,就是Sup,一次是重写原型,一次是子类型构造函数内部,于是在子类型调用的时候所有实例就有了超类型的属性和方法,我们需要的只是为了让函数复用定义在Sup原型上的方法,就像上文的say(),所以我们只需要超类型原型的一个副本就可以,我认为可以 Sub.prototype=Object.create(Sup.prototype)即可,不过高程给了一个可以随时调用的方法,

function inheritPrototype(Sub,Sup){

var prototype=Object.create(Sup.prototype);//创建对象

prototype.constructor=Sub;//增强对象  因为上面代码重写了新创建对象原型的值,constructor属性继承了Sup原型的值指向了Sup,因此重写

Sub.prototype=prototype;//指定对象,子类型构造函数继承了超类型构造函数原型中的方法从而可以调用

}

这样就不必在指定子类型的原型的时候调用超类型构造函数,提高了效率。

相关文章

  • js继承

    js各种继承方式介绍 1.原型链继承 2.构造继承 3.组合继承 4.寄生继承 5.寄生组合式继承 这种方式的高效...

  • js继承方式

    类式继承 构造函数继承 组合继承 类式继承 + 构造函数继承 原型式继承 寄生式继承 寄生组合式继承 寄生式继承 ...

  • js常见的继承方式

    js常见的继承方式 1. 原型链继承 2. 构造函数继承 3. 组合式继承 4. 原型式继承 5. 寄生式继承 6...

  • 前端面试题总结【38】:javascript继承的 6 种方法

    原型链继承 借用构造函数继承 组合继承(原型+借用构造) 原型式继承 寄生式继承 寄生组合式继承 推荐: 持续更新...

  • javaScript 实现继承方式

    JavaScript实现继承共6种方式:原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承。

  • Javascript 继承

    参考:JavaScript高级程序设计(第3版) 原型链 原型式继承 寄生式继承 寄生组合式继承

  • JS类的继承

    1.类式继承 构造函数继承 3.组合继承 4.原型继承 5.寄生式继承 6.寄生组合式继承

  • 18-深入拓展原型链模式(六种常用继承方式)

    1. 原型继承 2. call继承 3. 冒充对象继承 4.组合式继承 5. 寄生组合式继承 6. 中间类继承

  • JS寄生组合式继承

    解析一下寄生组合式继承使用的原因。因为其他的继承方式要么就是函数无法复用(就是每创建一个新的实例,创建其中的方法的...

  • JS寄生组合式继承

    JS的继承方式有很多种,最理想的继承方式是寄生组合式继承。组合继承(构造函数和原型的组合)会调用两次父类构造函数的...

网友评论

      本文标题:JS寄生组合式继承

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