2017-06-24 7 views
0

私は
var a = 2; var b = a + 2;//a is 2 b is 4 a = 3;//a is 3 b is 4
を言うならば、たとえば、変更、Bの変化が関係し、むしろ最初に設定してから何しているよりの電流値に応じてあるように、その関係を設定するにはどのような方法があります後で起こってもbには影響しません。リスナーを使用して何かが変更されたときに呼び出される更新関数を使って何かを行うことができますし、リレーションシップをリセットすることもあれば、オブジェクトやポインタを使用することもありますが、言語に組み込まれた方法がありますか?私はスライダーのようなhtmlやUI要素を表示しようとしているので、スライダーの更新された値をhtml要素として多くの異なる場所に表示し、さまざまな場所で使用したいと思っています。私はまた、常にこの種の問題にぶつかります。今私はすべてのフレームを実行するループでこれをやっています。それはほとんどすべてが起こるので、そこの関係を更新するだけです。本当に不便で、読みにくいです。私が知らない言語に組み込まれた何か、あるいはもっと簡単な方法がありますか?私は何か具体的なことは求めていません、何らかの変数を何らかの形で定義すると、その定義を継続的に更新することができますか?どのように関係を継続的にjavascriptで更新するには?

答えて

1

オブジェクトのプロパティを使用して派生値を計算できます。 astateオブジェクトのプロパティで、baから派生した値になり、bは常にa + 2になります。

aが変更されるたびに何らかのUIアップデートを開始したい場合は、さらにaをセッターでプロパティにすることができます。

let state = { 
 
    _a: 2, 
 
    get a(){ 
 
    return this._a 
 
    }, 
 
    set a(v){ 
 
    this._a = v 
 
    console.log("update state") 
 
    }, 
 
    get b(){ 
 
    return this.a + 2 
 
    } 
 
} 
 

 
console.log(state.a, state.b) 
 
state.a = 3 
 
console.log(state.b) 
 

 
// change b computed value 
 
Object.defineProperty(state, 'b', { 
 
    get: function() { return this.a + 3; }, 
 
    enumerable: true, 
 
    configurable: true 
 
}); 
 
console.log(state.b)

+0

これは、多くのケースに良い解決策ですが、関係は状態オブジェクトの定義の外部で変更することができますか? –

+0

@MikeDelmonaco私はあなたの質問を理解するか分からない。どういうわけか、オブジェクトを使わずに 'a'から' b'を派生させることを意味しますか? – Bert

+0

私は、状態オブジェクトが最初に定義された後に、bの定義をa + 2から3 * aのようなものに変更することを意味します。つまり、後でbを再定義します。 –

関連する問題