猿问

JavaScript中继承时constructor指向的问题

正在学习《JavaScript高级程序设计》,对书中p163-p164的例子有点疑问。
例子如下:
javascriptfunctionSuperType(){
this.property=true;
}
SuperType.prototype.getSuperValue=function(){
returnthis.property;
};
functionSubType(){
this.subproperty=false;
}
//继承了SuperType
SubType.prototype=newSuperType();
varinstance=newSubType;
//后面不相关的blahblah省略
书中提到了:
要注意instance.constructor现在指向的是SuperType,这是因为原来SubType.prototype中的constructor被重写了的缘故。
对此书中的注释是:
实际上,不是SubType的原型的constructor属性被重写了,而是SubType的原型指向了另一个对象——SuperType的原型,而这个原型对象的constructor属性指向的是SuperType。
对此我不是很能理解,为什么SubType的原型是SuperType的实例,它的constructor就要指向SuperType呢?
如果这么说,所有函数的默认原型都是Object的实例,像SuperType的constructor不就得指向Object?
求大神指点迷津(抱拳)
慕丝7291255
浏览 371回答 2
2回答

Qyouu

因为constructor属性是可以读写的。SubType.prototype=newSuperType();上面这句就是newSuperType,SubType的constructor值就被重写了。如果这么说,所有函数的默认原型都是Object的实例,像SuperType的constructor不就得指向Object?SubType.prototype=newSuperType();这里用了new所以constructor就指向了SuperType。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答