0

これは非常に基本的なことですが、なぜxがこのコードブロックで未定義を返すのですか?プロパティを定義し、すぐにそれを使用して別のプロパティを設定する方法はありますか?

    var grid = {
        x : 75,
        y : 75,
        location : [grid.x, grid.y],                
        init : function () {
            console.log(grid.location[0]);
        }
    }
4

2 に答える 2

2

オブジェクトが変数に割り当てられる前に、変数を使用してオブジェクトのプロパティにアクセスすることはできません。オブジェクトが作成されている間、変数gridはまだ定義されていません。オブジェクトの作成中は、オブジェクトへの参照はありません。

オブジェクトが変数に割り当てられると、プロパティを使用できます。

var grid = {
    x : 75,
    y : 75,
    init : function () {
        console.log(grid.location[0]);
    }
}

grid.location = [grid.x, grid.y];

これを関数式でラップして、完全なオブジェクトを返すコードを取得することもできます。

var grid =
  (function(){

    var obj = {
      x : 75,
      y : 75,
      init : function () {
        console.log(grid.location[0]);
      }
    };
    obj.location = [obj.x, obj.y];

    return obj;

  })();
于 2013-03-25T14:38:24.347 に答える
1

プロパティを定義し、すぐにそれを使用して別のプロパティを設定する方法はありますか?

いいえ。ただし、関数の構文糖衣であるゲッターを使用することはできます。

var grid = {
    x : 75,
    y : 75,
    get location() {
        return [this.x, this.y];
    },                
    init : function () {
        console.log(grid.location[0]);
    }
}

http://jsfiddle.net/mattball/erUJj

この回答は、さまざまなオプションをまとめたものです:https ://stackoverflow.com/a/15486618

于 2013-03-25T14:25:43.683 に答える