javascript - 為什麼newtoy.constructor === Gadget在控制台的結果是false?
怪我咯
怪我咯 2017-06-26 10:57:07
0
2
875
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() {
        ...
    }
})
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!