2016-07-17 5 views
0

私は現在、本のシリーズを読んでいますあなたはJSを知らないです。それが書かれている本の一つで:setterとObject.create()の使用。

fooは[[プロトタイプ]]チェーンに高い発見され、それはセッター (第3章を参照してください)だ場合は、セッターが常に呼び出されます。いいえfooは (別名shadowed on)myObjectに追加されず、fooセッターは に再定義されません。ログがその順序で54をプリントアウトし、私の驚きのために

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); 

は、今私は、次のコードを試してみました。本に書かれているものから、私は2つの 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); 
+1

「t:未定義」を削除してください。これはES5では無効です。そして、代わりにあなたが使っているグローバル変数 't'を宣言するべきです。 – Bergi

答えて

1

45ないで、2つの異なるオブジェクトに_t_に保存されていますt

tは、2つの異なるオブジェクトのコンテキストで呼び出されるため、thisという値が異なりますが、どちらの場合でもまだsetterとgetterです。

+0

ありがとう:)もし私が 'b 'を使ってそれをしたいのであれば、どうすれば' a'の値を変更できますか?セッターを使う方法はありますか? – user3719857

+0

現在のオブジェクトのプロパティの代わりに変数を使用します。 – Quentin

+0

ありがとう。最後の1つの質問 - セッターのルールが実際に使用される例はどこで見つけることができますか? – user3719857

関連する問題