Pourquoi newtoy.constructor === Gadget génère-t-il une console fausse ?
怪我咯
怪我咯 2017-06-26 10:57:07
0
2
909
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

L'exemple ci-dessus est tiré du livre "Guide de programmation orientée objet"

怪我咯
怪我咯

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

répondre à tous(2)
学霸

Si le code est écrit correctement, alors il est faux, car vous avez réécrit l'objet prototype de Gadget et l'objet prototype que vous avez réécrit n'a pas d'attribut constructeur. Vous pouvez vous référer au chapitre 6 de "Programmation avancée JavaScript" Introduction à. prototype

typecho

La bonne réponse à l'étage, Gadget.prototype a été réécrit. Parce qu'il existe un constructeur implicite dans l'objet prototype, qui pointe vers le constructeur lui-même. Comme suit :

L'expansion du prototype est mieux écrite sous cette forme :

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

Ou utilisez Object.assign() pour fusionner des objets :

Test.prototype = Object.assign(Test.prototype, {
    newAttr: '',
    newFn: function() {
        ...
    }
})
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal