あなたが関数を呼び出し初めてで書き込み可能ではない列挙ではないnewProp
の名前プロパティは、それは新しい変数「d」を作成しますobj
割り当てます。それをそれ自身に割り当てる。 OOPでは、関数withValue
は同じクラスになり、d
は静的メンバーのようになります。
console.log(withValue.d); //undefined
var x = withValue(5);
console.log(x.value); //5
console.log(withValue.d.value); //5
console.log(x === withValue.d); //true
可変x
可変withValue.d
が同じオブジェクトに両方の参照である:
withValue.d.value = 1;
console.log(x.value); //1
Iが再びwithValue
を起動した場合、それは既存の静的メンバ(withValue.dをリサイクルまたは再利用することになります
var y = withValue(8);
console.log(withValue.d.value, y.value, x.value); //8 8 8
console.log(x === y, x === withValue.d, y === withValue.d); //true true true
アップデート::)とその値を更新withValue
があった場合:
function withValue(value) {
var d = {
enumerable: false,
writable: false,
configurable: false,
value: null
};
withValue.d = d;
d.value = value;
return d;
};
次に、関数の各呼び出しは、新しいオブジェクトを作成します。
var x = withValue(1);
var y = withValue(2);
console.log(withValue.d.value, y.value, x.value); //2 2 1
console.log(x === y, x === withValue.d, y === withValue.d); //false false true
y.value = 999;
console.log(withValue.d.value, y.value, x.value); //999 999 1
だから今、2つのオブジェクトが作成されます - x
によってy
によって参照される1つとwithValue.d
およびその他。最初のケースでは、これら3つの変数が同じオブジェクトにアクセスしていました。
'var' = {}'のようなものではなく 'Function'オブジェクト(' withValue')を使ってオブジェクトを操作するだけです。しかし、私はObject.defineProperty()でどのように収まるのかはよく分かりません。 –
私はこの関数がObject.definePropertyに渡されるいくつかのプロパティを生成するために使われると思います。'withValue'関数に' d'プロパティを代入すると、返された値は代りに割り当てられた値に基づいています。 –
これは、通常の英語の意味で「リサイクル」を使用しています。これは、毎回新しいオブジェクトを作成するのではなく、以前の呼び出しで使用されたものと同じオブジェクトを再利用しています。 –