javascript - 为什么newtoy.constructor === Gadget在控制台的结果是false?
怪我咯
怪我咯 2017-06-26 10:57:07
[JavaScript讨论组]
function Gadget(name,color){
    this.name=name;
    this.color=color;
    this.whatAreYou=function(){
        return 'I am a ' + this.color + ' ' + this.name;
    };
}

Gadget.prototype={
    price:100,
    rating:3,
    getInfo:function(){
        return 'Rating: ' + this.rating + ', price: ' + this.price;
    }
};

var newtoy=new Gadget('webcam','black');
new.rating;//3
newtoy.constructor === Gadget;//true

上述例子摘自《面向对象编程指南》一书

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
欧阳克

如果代码没写错的话,那么就是false,因为你已经把Gadget的原型对象给重写了,而你重写的原型对象中没有constructor属性,可以参考一下《JavaScript高级程序设计》中第六章关于原型的介绍

typecho

楼上正解,Gadget.prototype 被重写了。因为原型对象中有个隐式的constructor,指向了构造函数本身。如下:

原型拓展,最好写成这种形式:

Test.prototype.newFn = function() {
    ...
}

或者使用Object.assign()合并对象:

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

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