1

我有一个函数,我正在遍历从数据库中获取的数据对象。在 foreach 循环中,我试图创建一个对象(触发器)并将其推送到另一个变量(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

我没有测试它,但它看起来几乎一样。只有一件事:这应该给你一个例外:

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 回答