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,以上就是小编对继承的一些理解了,有些粗线希望能对大家有些帮助

  • 相关阅读:
    【WP8.1】富文本
    【WP8.1】WebView笔记
    【WP8】扩展CM的WindowManager
    随笔:关于关于
    <正则吃饺子> :关于微信支付的简单总结说明(二)
    <正则吃饺子> :关于微信支付的简单总结说明(一)
    <正则吃饺子> :关于Collections中 比较器的简单使用
    <正则吃饺子> :关于 Matcher 的 replaceAll 的简单使用
    <正则吃饺子> :关于oracle 中 with的简单使用
    <正则吃饺子> :关于oracle 中 exists 、not exists 的简单使用
  • 原文地址:https://www.cnblogs.com/snails64/p/9051484.html
Copyright © 2011-2022 走看看