关于es5原型继承的问题

关于es5继承中子构造函数原型的问题

clipboard.png

图中代码第5行
我能够理解第四行子构造函数的原型是父构造函数new出来的 Sub.protorype = new Super()
所以在这里 Sub.protorype.constructor === Super 是为true的
至于要把子构造函数的原型的构造函数重新指向自身的原因是什么呢
我发现好像不执行这个语句的话 Sub.protorype.constructor = Sub 也能进行继承

阅读 1.9k
2 个回答

是能继承啊,但是Sub的实例获取constructor的时候就错了,成了Super明显是不对的,这是副作用,要纠正这个副作用。

constructor只是告诉你实例是用哪个构造函数初始化的,不影响原型链

Sub.protorype.constructor = Sub;

不管上面这句写还是不写,都不影响原型链,以下代码恒为真

       Sub.prototype.__proto__.__proto__ === Object.prototype //原型链
       sub1 instanceof Super
       sub1 instanceof Sub //实例加了个1,更好区分Sub构造函数

总之,原型链取决于__proto__这个玩意,constructor只是用于检测的一个指针属性

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题