別のプロパティに応じて、ある名前空間にプロパティを定義したいと思います。someNameSpace.x2
以下は、以下に基づいて割り当てる私の試みsomeNameSpace.x1
です。
someNameSpace = {
x1: 100,
x2: x1 * 0.5,
};
しかし、それは失敗します。これを行う正しい方法は何ですか?
別のプロパティに応じて、ある名前空間にプロパティを定義したいと思います。someNameSpace.x2
以下は、以下に基づいて割り当てる私の試みsomeNameSpace.x1
です。
someNameSpace = {
x1: 100,
x2: x1 * 0.5,
};
しかし、それは失敗します。これを行う正しい方法は何ですか?
x1
スコープでまだ定義されていないため、これを行うことはできません。
someNameSpace = { x1 : 100 };
someNameSpace.x2 = someNameSpace.x1 * 0.5;
それ自体を定義するオブジェクトリテラルでオブジェクトを参照することはできません。
var something = { x: 3 };
something.x2 = something.x * 2;
あなたはそれを宣言することができます。次に、宣言の後に必要なプロパティを追加します。
someNameSpace = {
x1: 100,
get x2(){return this.x1 * 0.5},
};
someNameSpace.x2; // 50
someNameSpace.x1 = 5;
someNameSpace.x2; // 2.5
他のすべての愚か者のように不正行為をする代わりに、ゲッターを使用してください。プロパティの値は、 :Px2
の値に本当に依存するようになりました。x1
自己実行関数を使用するトリックは次のとおりです。
var someNameSpace = (function(){
var x1 = 100;
return {
x1: x1,
x2: x1 * 0.5
};
})();
あなたはこれを行うことができます:
someNameSpace = {
x1: 100
}
someNameSpace.x2 = x1 * 0.5;
値を返す関数を定義できます
var NS = {
x1: 100,
computeX2: function(){
return this.x1 * 0.5;
}
}
ember.jsなどの一部のjavascriptフレームワークでは、この方法でいわゆる「計算されたプロパティ」を定義できます。