2

別のプロパティに応じて、ある名前空間にプロパティを定義したいと思います。someNameSpace.x2以下は、以下に基づいて割り当てる私の試みsomeNameSpace.x1です。

someNameSpace = {
  x1: 100,
  x2: x1 * 0.5,
};

しかし、それは失敗します。これを行う正しい方法は何ですか?

4

6 に答える 6

3

x1スコープでまだ定義されていないため、これを行うことはできません。

someNameSpace = { x1 : 100 };
someNameSpace.x2 = someNameSpace.x1 * 0.5;
于 2012-11-21T17:37:46.927 に答える
1

それ自体を定義するオブジェクトリテラルでオブジェクトを参照することはできません。

var something = { x: 3 }; 
something.x2 = something.x * 2;

あなたはそれを宣言することができます。次に、宣言の後に必要なプロパティを追加します。

于 2012-11-21T17:37:51.377 に答える
1
someNameSpace = {
  x1: 100,
  get x2(){return this.x1 * 0.5},
};
someNameSpace.x2; // 50
someNameSpace.x1 = 5;
someNameSpace.x2; // 2.5

他のすべての愚か者のように不正行為をする代わりに、ゲッターを使用してください。プロパティの値は、 :Px2の値に本当に依存するようになりました。x1

于 2012-11-21T17:47:22.917 に答える
0

自己実行関数を使用するトリックは次のとおりです。

var someNameSpace = (function(){
    var x1 = 100;
    return {
        x1: x1,
        x2: x1 * 0.5
    };
})();

http://jsfiddle.net/T2kyZ/

于 2012-11-21T17:37:32.970 に答える
0

あなたはこれを行うことができます:

someNameSpace = {
    x1: 100
}
someNameSpace.x2 = x1 * 0.5;
于 2012-11-21T17:38:07.127 に答える
0

値を返す関数を定義できます

var NS = {
  x1: 100,
  computeX2: function(){
     return this.x1 * 0.5;
  }
}

ember.jsなどの一部のjavascriptフレームワークでは、この方法でいわゆる「計算されたプロパティ」を定義できます。

于 2012-11-21T17:40:44.103 に答える