es5继承组合理解

谁都会走 提交于 2019-12-06 02:45:09

  es6之前没有类,只有通过构造函数+原型 =  组合继承,es6新增了Class(类),extends(继承)。此处只对es5的继承理解。

 

属性的继承

    通过构造一个Father构造函数和Son子构造函数,然后利用call()这个方法将Father构造函数中的this指向,更改成子构造函数中的this指向,从而达成继承了父构造函数中的属性,而子构造函数还可以新增一些属性。

 

  既然属性可以继承,那么方法自然也可以继承,方法的继承就用到了原型,原型链

 

  很显然,Father.prototype中的方法新增了子构造函数新增的exam方法,这说明,如果用此方法添加新方法就会牵连到父构造函数,是不行的。

  为什么要手动修改constructor呢? 因为,Son.prototype = Father.prototype 意味着子构造函数的prototype被覆盖了。子构造函数就是父构造函数了,父构造函数的constructor的指向就是Father构造函数,所以要手动修改

正确的继承方法

 

 

 

 

 

 

 

 

   为了更详细的描述这里用图形来描述:

 

 

  访问到父构造函数的方法通过原型链来访问,新添加的子构造函数方法会在父构造函数的实例化上修改不会影响,父构造函数的prototype。

  最后添加一个原型链的执行过程帮助理解记忆:

 

 

 

 

 

 

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!