JS基础-全方面掌握继承 (4)

在寄生组合式继承中有一段如下一段修正constructor 指向的代码,很多人对于它的作用以及为什么要修正它不太清楚。

son.prototype.constructor = son; // 修正constructor 指向 construct的作用

的定义:返回创建实例对象的Object构造函数的引用

即返回实例对象的构造函数的引用,例如:

let instance = new sonFn() instance.constructor // sonFn函数 construct的应用场景:

当我们只有实例对象没有构造函数的引用时

某些场景下,我们对实例对象经过多轮导入导出,我们不知道实例是从哪个函数中构造出来或者追踪实例的构造函数,较为艰难。

这个时候就可以通过实例对象的constructor属性来得到构造函数的引用:

let instance = new sonFn() // 实例化子类 export instance; // 多轮导入+导出,导致sonFn追踪非常麻烦,或者不想在文件中再引入sonFn let fn = instance.construct // do something: new fn() / fn.prototype / fn.length / fn.arguments等等 保持construct指向的一致性:

因此每次重写函数的prototype都应该修正一下construct的指向,以保持读取construct行为的一致性。

小结

继承也是前端的高频面试题,了解本文中继承方法的优缺点,有助于更深刻的理解JS继承机制。除了组合继承和寄生式继承都是由其他方法组合而成的,分块理解会对它们理解的更深刻。

建议多看几遍本文,建个html文件试试文中的例子,两相结合更佳!

对prototype还不是很理解的同学,可以再看看:JS基础-函数、对象和原型、原型链的关系

觉得我的博客对你有帮助的话,就给我点个Star吧!

前端进阶积累、公众号、GitHub、wx:OBkoro1、邮箱:obkoro1@foxmail.com

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpysjp.html