次のコードの例として、すべてのインスタンスを手動で反復する必要なく、ローカライズされた値参照を使用して JavaScript 擬似クラスのすべてのインスタンスに追加されるプロパティ値を初期化する方法を見つけようとしています。
function A() {
this.a = '0';
}
var a = new A();
var b = new A();
document.write(a.a + a.b + a.c + '<BR />');
A.prototype.b = '1';
Object.defineProperty(A.prototype, 'c', {
writable: true,
value: (function() { return(this.a + '|'); })()
});
document.write(a.a + a.b + a.c + '<BR />');
b.c = '3';
document.write(a.a + a.b + a.c + '<BR />');
document.write(b.a + b.b + b.c + '<BR />');
出力:
0undefinedundefined
01undefined|
01undefined|
013
しかし、望ましい条件下では次のように出力されます。
0undefinedundefined
010|
010|
013
編集:
明確にするために、値は「this」を介してアクセスされるオブジェクトのプロパティに初期化する必要があります。プロパティがオブジェクトに追加されるとき。get または set 呼び出しで遅延した方法ではなく、追加のローカル プロパティを使用しません。