JavaScript中继承时constructor指向的问题
天蓬老师
天蓬老师 2017-04-10 15:39:20
[JavaScript讨论组]

正在学习《JavaScript高级程序设计》,对书中p163-p164的例子有点疑问。
例子如下:

javascriptfunction SuperType(){
    this.property = true;
}
SuperType.prototype.getSuperValue = function(){
    return this.property;
};

function SubType(){
    this.subproperty = false;
}

//继承了SuperType
SubType.prototype = new SuperType();
var instance = new SubType;
//后面不相关的blahblah省略

书中提到了:

要注意instance.constructor现在指向的是SuperType,这是因为原来SubType.prototype中的constructor被重写了的缘故。

对此书中的注释是:

实际上,不是SubType的原型的constructor属性被重写了,而是SubType的原型指向了另一个对象——SuperType的原型,而这个原型对象的constructor属性指向的是SuperType。

对此我不是很能理解,为什么SubType的原型是SuperType的实例,它的constructor就要指向SuperType呢?
如果这么说,所有函数的默认原型都是Object的实例,像SuperType的constructor不就得指向Object?

求大神指点迷津(抱拳)

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
高洛峰

因为constructor属性是可以读写的。

SubType.prototype = new SuperType();

上面这句就是new SuperTypeSubTypeconstructor值就被重写了。

如果这么说,所有函数的默认原型都是Object的实例,像SuperType的constructor不就得指向Object?

SubType.prototype = new SuperType();这里用了new所以constructor就指向了SuperType

怪我咯

SubType的prototype属性也是一个对象

SubType.prototype = new SuperType();

SubType.prototype有了新的指向,一个以SuperType为原型的对象
SubType.prototype.constructor为SuperType对象的构造函数也就是SuperType

所有函数的原型为 Function, Function的原型为 Object

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号