作家
登录

JavaScript六种继承方式

作者: 来源: 2017-06-26 13:42:44 阅读 我要评论

  •  
  • var instance = new SubType() 
  •  
  • console.log(instance.getSuperValue())  // error  
  • 问题

    纯真的应用原型链持续,重要问题来自包含引用类型值的原型。

    1. function SuperType() { 
    2.  
    3.   this.colors = ['red''blue''green'
    4.  
    5.  
    6. function SubType() { 
    7.  
    8.  
    9. SubType.prototype = new SuperType() 
    10.  
    11. var instance1 = new SubType() 
    12.  
    13. var instance2 = new SubType() 
    14.  
    15. instance1.colors.push('black'
    16.  
    17. console.log(instance1.colors)  // ["red""blue""green""black"
    18.  
    19. console.log(instance2.colors) // ["red""blue""green""black" 

    在SuperType构造函数定义了一个colors属性,当SubType经由过程原型链持续后,这个属性就会出现SubType.prototype中,就跟专门创建了SubType.prototype.colors一样,所以会导致SubType的所有实例都邑共享这个属性,所以instance1修改colors这个引用类型值,也会反竽暌钩到instance2中。

    借用构造函数

    此办法为懂得决原型中包含引用类型值所带来的问题。

    这种办法的思惟就是在子类构造函数的内部调用父类构造函数,可以借助apply()和call()办法来改变对象的履行高低文

    1. function SuperType() { 
    2.  
    3.   this.colors = ['red''blue''green'
    4.  
    5.  
    6. function SubType() { 
    7.  
    8.   // 持续SuperType 
    9.  
    10.   SuperType.call(this) 
    11.  
    12.  
    13. var instance1 = new SubType() 
    14.  
    15. var instance2 = new SubType() 
    16.  
    17. instance1.colors.push('black'
    18.  
    19. console.log(instance1.colors)  // ["red""blue""green""black"
    20.  
    21. console.log(instance2.colors) // ["red""blue""green" 

    在给SubType原型添加办法的时刻,如不雅,父类上也有同样的名字,SubType将会覆盖这个办法,达到从新的目标。 然则这个办法依然存在于父类中。

    结不雅,SubType的每个实例就会具有本身的colors属性的副本了。


      推荐阅读

      理解Linux的平均负载和性能监控

    在本文中,我们将解释 Linux 体系中最关键的治理义务之一——关于体系 / CPU 的负载(load)和平均负载(Load average)的机能监控。起首来看所有的类 UNIX 体系中两个重要的表述:>>>详细阅读


    本文标题:JavaScript六种继承方式

    地址:http://www.17bianji.com/lsqh/35904.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)