使用谷歌地图,我有以下代码:
var tileNames = ["base", "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]”未定义。但是,“tileNames”数组仅用于定义“mapType”对象,因此,与传递给函数的“coord”和“zoom”变量不同,我希望使用“tileNames [ i]" 来定义函数的那部分。因此,理想情况下,分配给 mapType.parking 的函数看起来像这样......
function(coord, zoom) {
return "/maps/tiles/tilesparking/" + zoom + "_" + coord.x + "_" + coord.y + ".png";
};
...在第一段代码中定义函数之后。有没有办法获取变量/数组的值并使用它来静态定义函数,同时将其他两个变量保持为变量。
编辑:看看下面的各种答案,以下是我迄今为止所能达到的最好的答案。虽然在更一般的情况下绑定可能是理想的方法,但在这种特定情况下,“getTileUrl:”显然需要特定的语法,并且将绑定放置在为其定义的函数周围会导致地图错误。在尝试 KGZM 的建议时,它适用于所有最新版本,而不适用于 IE8 及更低版本。
var tileNames = ["beloit", "parking", "access_p"];
var mapType = {};
for (var i = 0; i <= (tileNames.length - 1); i++) {
(function(i) {
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);
})(i);
};