1

データベースからフェッチしたデータ オブジェクトを反復処理する関数が 1 つあります。foreach ループでは、1 つのオブジェクト (トリガー) を作成し、それを別の変数 (Geo) にプッシュして、別の変数 (トリガー) に配置しようとしています。以下はコードです-

var Geo={};

array.forEach(this.cityData,lang.hitch(this, function(data,i){
    var trigger = {
        type: "Inside",

        event: {
            name: data.Name,
            address:data.Address
        }
    };

    var Location= "Location_"+i;
    Geo.Location=trigger;  // pushing trigger in Geo variable
}));

var triggers = {
    Geo  //using Geo in trigger
};

以下のコードと var triggers={Geo};同等ですか?

私のプッシュコードはGeo.Location=trigger;正しいですか?

var triggers = {
    Geo: {
        Location_1: trigger1,
        Location_2: trigger2 ...... and so on...
    }
};
4

2 に答える 2

3

私はそれをテストしませんでしたが、ほとんど同じように見えます。1つだけ:これは例外を与えるはずです:

var triggers = {
      Geo  //using Geo in trigger
    };

ステートメントは

 var triggers = {
      'Geo': Geo  //using Geo in trigger
    };

そうしないと、トリガーに Geo プロパティがありません。

Geo.Location=trigger;大丈夫です。

于 2013-09-25T12:55:16.833 に答える
0

ドット表記 (obj.property) を介してアクセスされるオブジェクトのプロパティは、常に単純にプロパティ名と見なされます。つまり、変数は評価されません。ブラケット表記 obj[property] を使用して動的なプロパティ名を指定できます。これは、「プロパティ」を文字列に変換し (必要に応じて変数値を解決)、それを実際のプロパティ名として使用します。

だから、変更してみてください:

Geo.Location

に:

Geo[Location]

編集:期待される最終結果が何であるかはわかりませんが、最後のコードブロックに示されているようにオブジェクトを達成したい場合、正しい構文は次のとおりです。

triggers.Geo = Geo;

繰り返しますが、ドット表記形式の「Geo」は単にプロパティの文字列名であり、同じ名前の変数とは関係がないという事実を考慮して。

于 2013-09-25T12:54:12.893 に答える