2

たとえばjsFiddleでこれを実行すると:

function Animal() {
}

var animal = new Animal();

console.log(animal);
console.log(Animal.prototype);
console.log(animal.__proto__);

Animal {}次に、Chrome の DevTool ウィンドウのコンソールでこれらの結果 (3x) を取得します。

Animal {} (index):26
Animal {} (index):27
Animal {} (index):28

私の意見では、これは非常に紛らわしいです。なぜなら、私たちが知っているのは、この場合は同じオブジェクトを指しているだけだからAnimal.prototypeですanimal.__proto__。それとも、そうする合理的な理由がありますか?

4

1 に答える 1

0

それをオブジェクトとして表示し、その中にすべての属性を表示しています。この場合、何もないため、空白で表示されます。ただし、メソッドに属性を追加すると、そのようになります

function Animal() {
    this.foo="bar";
}

var animal = new Animal();

console.log(animal);
console.log(Animal.prototype);
console.log(animal.__proto__);

我々が得る:

Animal {foo: "bar"}
Animal {}
Animal {}

編集:質問を読み間違えました

MDNから: オブジェクトが作成されると、そのprotoプロパティは、内部の [[Prototype]] (つまり、コンストラクターのプロトタイプ オブジェクト) と同じオブジェクトを参照するように設定されます。protoに新しい値を代入すると、内部の [[Prototype]] プロパティの値も変更されます。ただし、オブジェクトが拡張不可能な場合は除きます。

于 2013-10-31T13:32:40.977 に答える