jul*_*lio 17 javascript dynamic-variables
我已经构建了一个数据驱动的谷歌地图,其中包含不同的图标,这些图标会根据项目的类型分配给地图.因此,如果我有5种类型的地标,每个都有不同的图标(商店,图书馆,医院等) - 我想要做的是动态生成谷歌图标对象.我在想这样的事情:
types = array('hospital','church','library','store',etc);
var i=0;
while (i<=types.length) {
var landmark + i = new google.maps.Icon();
landmark.image = "icon" + i + ".png";
i++;
}
Run Code Online (Sandbox Code Playgroud)
然而,正如你可能已经猜到的那样,这不起作用.我也试过使用eval,像这样:
while (i<=types.length) {
doIcon(i);
i++;
}
function doIcon(i){
eval("var landmark" + i + " = new.google.maps.Icon();");
return eval("landmark" + i);
}
Run Code Online (Sandbox Code Playgroud)
但它也没有用 - 我很感激任何关于动态生成javascript变量的指针.它必须是纯粹的js,我可以用PHP来做,但这不是一个选项.
谢谢!
Ply*_*ynx 33
这很容易做到: object["variablename"] = whatever;
所以例如你可以有一个对象:var Landmarks = {}你可以像这样添加它:Landmarks["landmark" + i] = new google.maps.Icon();并以这种方式传递它.
如果您需要这些变量是全局的(为什么会这样?),您可以直接使用这些变量访问全局对象window.
如果你要使用声明的对象来做它Landmark["landmark" + i],你真的可以使用索引数组而不是关联数,这对于迭代来说要容易得多.对象并没有真正用于索引属性,因为Arrays做得更好:
var myObj = // object version
{
"item0": "blah",
"item1": "blah"
// etc
}
var myArr = // array version
[
"blah",
"blah"
// etc
]
Run Code Online (Sandbox Code Playgroud)
使用数组更明智:
landmarks = []; // new array
types = array('hospital','church','library','store',etc);
var i=0;
while (i<=types.length) {
landmarks.push(new google.maps.Icon());
landmarks[i].image = "icon" + i + ".png";
i++;
}
Run Code Online (Sandbox Code Playgroud)
这样做更有意义,for...in对象上的循环可能会因为可枚举的原型属性而变得有点混乱等.
如果您尝试将变量设为全局变量,请将其添加到窗口对象:
var myCustomVar = "landmark" + i;
window[myCustomVar] = new google.maps.Icon();
alert(landmark0);
Run Code Online (Sandbox Code Playgroud)
但这会使用许多不必要的变量来污染全局命名空间.所以你对数组仍然会更好:
window.landmarks = [];
landmarks.push(new google.maps.Icon());
// etc...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38134 次 |
| 最近记录: |