私は現在、本のシリーズを読んでいますあなたはJSを知らないです。それが書かれている本の一つで:setterとObject.create()の使用。
は、今私は、次のコードを試してみました。本に書かれているものから、私は2つのfooは[[プロトタイプ]]チェーンに高い発見され、それはセッター (第3章を参照してください)だ場合は、セッターが常に呼び出されます。いいえfooは (別名shadowed on)myObjectに追加されず、fooセッターは に再定義されません。ログがその順序で
5
と4
をプリントアウトし、私の驚きのためにvar a = { set t(tet) { this._t_ = tet; }, get t() { return this._t_ ; } }; a.t = 5; var b = Object.create(a); b.t = 4; console.log(a.t); console.log(b.t);
:
4
が印刷されていることを期待していますが、実際にはシャドーイングしているようです。何故ですか ?
クエンティンによって答えのおかげで、これは実際に私が望んでいたfunctionallityを示すコードです:)
var a = {
t : undefined,
set t(tet) {
t = tet;
},
get t() {
return t ;
}
};
a.t = 5;
var b = Object.create(a);
b.t = 4;
console.log(a.t);
console.log(b.t);
「t:未定義」を削除してください。これはES5では無効です。そして、代わりにあなたが使っているグローバル変数 't'を宣言するべきです。 – Bergi