es5继承组合理解

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

 

属性的继承

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

 

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

 

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

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

正确的继承方法

 

 

 

 

 

 

 

 

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

 

 

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

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

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-11-29 16:15  前端开发小菜鸡  阅读(377)  评论(0)    收藏  举报