2016-11-15 6 views
0

JSクラスは、我々はそうのような、そのクラスのプロパティのgetterとsetterを定義することができ宣言:私はゲッターとセッターをどのように定義するか、JavascriptをGetterおよびクラス自体のセッター

class Foo{ 

    get bar(){ 
     return 'foo-bar'; 
    } 

    set bar(n){ 
     this.baz = n * 10; 
    } 

} 

let foo = new Foo(); 

console.log(foo.bar) //foo-bar 

foo.bar = 7; 
console.log(foo.baz) //70 

私が思っていたことですにクラスそのもの? たとえば、foo = 7はコードブロックを起動し、console.log(foo)は 'foo-bar'を出力します。

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters – saj

+1

1つの質問:なぜですか? – Li357

+0

変数に代入すると、変数の古い値は完全に無視され、代入する機会はありません。 – Barmar

答えて

0

できません。

foo = 7; 

ます7fooを再度割り当てます。

+0

これは本当ですか?私はfoo.bar = 7はfoo.barに7を割り当てていないので、可能性があると仮定しました。 –

+0

@ Jrs.b意味がない...なぜ 'foo.bar = 7'は' foo.bar'に7を割り当てるのですか? 'foo' *を代入するのはなぜ' foo' *を変更しないのでしょうか? – Li357

+0

@ Jrs.bこれは、プロパティbarにアクセスするときにオブジェクトを通過するためです。オブジェクトはgetter/setterにリダイレクトできます。 – Barmar

2

できません。 foo =は、変数fooに値を割り当てることを意味します。クラスのインスタンスが作成されるときにコンストラクタを使用してコードを実行するのが最善の方法です。

class Foo{ 

    constructor(){ 
    console.log('A Foo instance has been created!'); 
    } 

    get bar(){ 
    return 'foo-bar'; 
    } 

    set bar(n){ 
    this.baz = n * 10; 
    } 

} 

一部の言語はまた、値が破壊または範囲のうち、最終的にガベージコレクタによってクリーンアップされるたびにdestructor仕様等を有するが、ES6はそのような機能を提供しません。

関連する問題