4

プロトタイプを理解しようとしています。私はChromeのコンソールで遊んでいて、誰かが私にこれが起こっている理由を教えてくれることを望んでいました.

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;
Gadget.prototype.rating = 3;
Gadget.prototype.getInfo = function() {
    return 'Rating: ' + this.rating + ', price: ' + this.price;
};

var newtoy = new Gadget('webcam', 'black');

newtoy.constructor.prototype

Gadget {price: 100, rating: 3, getInfo: function} //Expected

次のことを試してみると、プロトタイプには期待した結果がありません。

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');

newtoy.constructor.prototype

Object {} //Empty Object!!!!!???
4

2 に答える 2

4

jsFiddle デモ

これは、これを行ったときにプロトタイプを拡張する代わりに上書きしたためです。

Gadget.prototype = 

上書きするときは、コンストラクターのファサードを次のようにするのが一般的です。

Gadget.prototype = {
 constructor : Gadget
}

だからあなたの正確な状況のために:

Gadget.prototype = {
 constructor : Gadget,
 price: 100,
 rating: 3,
 getInfo: function() {
   return 'Rating: ' + this.rating + ', price: ' + this.price;
 }
};
于 2013-03-29T02:20:40.997 に答える
1

プロトタイプは、最初は特別な型付きオブジェクトです。プロトタイプに新しいオブジェクトを割り当てると (中括弧は新しいオブジェクトの省略形です)、特別なプロトタイプ オブジェクトは失われます。

JavaScript .prototype の仕組みを参照してください。より深い説明のために。

于 2013-03-29T02:23:54.657 に答える