我有一个函数,我在迭代数据对象,我从数据库中提取。在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...
}
};
答案 0 :(得分:3)
我没有测试它,但它看起来几乎一样。 就一件事: 这应该给你一个例外:
var triggers = {
Geo //using Geo in trigger
};
声明应为
var triggers = {
'Geo': Geo //using Geo in trigger
};
否则触发器将不具有Geo属性。
Geo.Location=trigger;
就好了。
答案 1 :(得分:0)
通过点表示法(obj.property)访问的对象中的属性始终被简单地视为属性名称 - 即不评估变量。您可以使用括号表示法来拥有动态属性名称:obj [property],它将“property”转换为字符串(必要时解析变量值)并将其用作实际属性名称。
所以,试试changin:
Geo.Location
为:
Geo[Location]
编辑:我不确定预期的最终结果是什么,但是如果你想要实现上一个代码块中显示的对象,那么正确的语法应该是:
triggers.Geo = Geo;
再次考虑到点符号形式中的“Geo”只是属性的字符串名称,并且与同名变量无关。