在寄生组合式继承中有一段如下一段修正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