zoukankan      html  css  js  c++  java
  • js继承和基础继承小结

    前两天学习JS继承的时候觉得有点绕,子承父 父承子的一通,后来搜到一篇阮一峰大神的继承方式的博客学习了一下,现整理了一下主要的五种继承方式。

    父构造器Person,子构造器Man,Man是子构造器new出来的对象,"只能继承父构造器中的属性" 代表继承属性和方法.

    第一种叫属性继承:
    此种继承方式只能继承父构造器中的属性,不能继承父构造器原型上的属性. Person,.apply(this, arguments)也可用Person.call(this)替换.Man对象有两个层级,第一级存放着自有属性以及父构造器中的属性,第二级存放着自己函数原型上的属性(Man.prototype)

    第二种叫原型继承:

    由于Person对象中,不变的属性都可以直接写入Person.prototype.所以我们可以让Man()跳过Person(),直接继承Person.prototype.这样做的优点是效率比较高,比较省内存。缺点是 Man.prototype和Person.prototype现在指向了同一个对象,那么任何对Man.prototype的修改,都会反映到Person.prototype。

    第三种原型链继承:

    如果Man的prototype对象,指向一个Person的实例,那么所有Man的实例,就能继承Person了.它相当于完全删除了prototype 对象原先的值,然后赋予一个新值. 缺点是少了contructor ,原型对象的指向也发生改变 而且还会无缘无故多了好多东西

    第四种原型拷贝继承:

    简单说,如果把父对象的所有属性和方法,拷贝进子对象,不也能够实现继承吗? 首先,还是把Person的所有不变属性,都放到它的prototype对象上。遍历prototype里面的属性把Person里面的属性方法拷贝给Man.

    第五种寄生继承:

    首先我们先用一个空的对象,先把Person.prototype的属性传给这个空对象,fn是空对象,所以几乎不占内存。这时,修改Man的prototype对象,就不会影响到Person的prototype对象了.

    OK,以上就是小编对继承的一些理解了,有些粗线希望能对大家有些帮助

  • 相关阅读:
    无线安全课堂:手把手教会你搭建伪AP接入点
    转载——开阔自己的视野,勇敢的接触新知识
    关于系统架构的一些总结
    MessageBox.Show()如何换行
    不患寡而患不均
    由CHAR(2)引发的BUG
    DataRow.RowState 属性
    C# 使用TimeSpan计算两个时间差
    利用反射调出其他项目的界面
    DB2 中将date类型的转换成timestamp
  • 原文地址:https://www.cnblogs.com/snails64/p/9051484.html
Copyright © 2011-2022 走看看