1

「this.value=1;」を使用してもまったく同じ結果が得られます。コンストラクター関数内または関数コンストラクターのプロトタイプ内にプロパティ値を配置するだけです-「MyClass.prototype.value = 1;」

function MyClass() {
 //this.value=1;
}
MyClass.prototype.value =1;


var a = new MyClass();
document.write(a.value + "<br>");
a.value=13;
document.write(a.value + "<br>");

var b = new MyClass();
document.write(b.value);

結果は次のとおりです。

1

13

1

最後の値は 1 であるため、明らかにすべてのオブジェクト (a,b) は、独自のメモリ ブロック内に独自の値のコピーを取得します。オブジェクト間で共有されていない場合、プロトタイプ値の使用は正確には何ですか?

4

2 に答える 2

6

あなたのテストは怪しいです。プロトタイプ値値間で共有されますが、書面a.value = 13では、 のプロパティをシャドウしています。これを試着してサイズを確認してください:MyClass.prototype.valuea

function MyClass() {}
MyClass.prototype.value = 1;

var a = new MyClass();
document.write(a.value + "<br>");
a.__proto__.value=13;
document.write(a.value + "<br>");

var b = new MyClass();
document.write(b.value);

(デモ)

オブジェクト プロパティのルックアップは、プロトタイプが null になるか、指定された名前のプロパティが見つかるまで、プロトタイプ チェーンを上に移動します。元のテストでは、そのオブジェクトで呼び出されるプロパティがあるため、プロトタイプに到達する前にa.value = 13ルックアップa.valueが終了します。avalue

もっと読む:

于 2012-08-15T02:07:33.923 に答える
2

「まったく同じ結果が得られる」

テスト結果の解釈方法をまだ知らないからです。

すべてのインスタンスはプロトタイプのプロパティを共有しますが、インスタンスはプロトタイプと同じ名前のインスタンス プロパティを持つことができます。

したがって、インスタンスa.value = 13でプロパティを作成していると言ったが、プロトタイププロパティはまだ.avalue1

代わりに、 と を作成したにプロトタイプを変更しても、とレポートMyClass.prototype.value = 13の両方が表示されると言った場合。a.valueb.value13value ab

于 2012-08-15T02:13:56.107 に答える