我正在使用 Google map ,需要创建三个以上的图 block 叠加层。一个例子:
平铺叠加
var parkingOptions = { //Parking Overlay
getTileUrl: function(coord, zoom) {
return "/maps/tiles/tilesparking/" + zoom + "_" + coord.x + "_" + coord.y + ".png";
},
tileSize: new google.maps.Size(256, 256)
};
var parkingMapType = new google.maps.ImageMapType(parkingOptions);
但是,为了避免因缺少映射范围之外的图 block 而出现 404 错误,我的代码稍微复杂一些;因此,我打算创建一个循环,将分配给每个覆盖层的特定关键字(此处给出为“ parking ”)插入到上面的代码中。因此:
For 循环
var tileNames = ["base", "parking", "access"];
for (var i = 0; i < tileNames.length; i++) {
//insert Tile Overlay code here
};
但是,我有一个特殊问题:我无法找到一种方法从tileNames数组中获取字符串并使用它们来初始化Tile Overlay代码中的两个变量。理想情况下,我希望实现这样的目标:
尝试 1
var tileNames[1] + "Options" = { //ideally: var parkingOptions = {
//insert remaining code
};
但是这不起作用,我也没有真正期望它起作用。也不会尝试创建这些完整的字符串并将其插入初始化中:
尝试 2
var newOptions = tileNames[1] + "Options";
var newOptions = {
//insert remaining code
};
那么,有没有办法将字符串放入初始化变量中?
注意:我已将我自己的问题替代解决方案作为答案。它应该可以工作,但它会破坏变量的名称并用一个不伦不类的数组变量替换它。我最好保留描述性变量名称,因为它们经常用于在结果代码中添加和隐藏覆盖层。
解决方案 无论如何,对于这个问题...
var tileNames = ["beloit", "parking", "access"];
var mapType = {};
for (var i = 0; i < tileNames.length; i++) {
var tileOptions = {
getTileUrl: function(coord, zoom) {
return "/maps/tiles/tiles" + tileNames[i] + "/" + zoom + "_" + coord.x + "_" + coord.y + ".png";
},
tileSize: new google.maps.Size(256, 256)
};
mapType[tileNames[i]] = new google.maps.ImageMapType(tileOptions);
};
难题的另一部分,getTileUrl 函数中的“tileNames[i]”未定义,因为该函数在执行时需要它,而不是将名称字符串放入函数中;然而,这是一个新问题:Javascript: Making a variable static when defining a function in a loop?
最佳答案
你不能这样做:
var tileNames[1] + "Options" = {
//insert remaining code
};
但你可以这样做:
window['a'] = 'b';
alert(a); // shows 'b'
或者如果你在一个函数中
this['a'] = 'b';
编辑:
var obj = {};
obj.a = 'a';
// obj.a == obj['a']
alert(obj['a']) // alerts a
关于Javascript:从字符串初始化变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11211940/