Mootools破坏我的全局变量!谷歌地图+ Mootools
即时通讯使用Mootools的一些东西,如在谷歌地图应用程序中的撞块和东西。一切工作100%,之前我添加了Mootools的剧本,如果我添加脚本之前或之后,我宣布我的全局不要紧,MooTools的杀死他们......看看片断Mootools破坏我的全局变量!谷歌地图+ Mootools
<script language="javascript" type="text/javascript" src="mootools.js"></script>
<script language="javascript" type="text/javascript" src="bumpbox.js"></script>
<script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript">
</script>
<script type="text/javascript">
var currentBounds;
var currentMarker = null;
var currentInfo = null;
var markersArrayProps = [];
var markersArrayAreas = [];
</script>
还有更多......但这只是显示发生了什么,如果我删除了调用mootools.js
的行,那么一切正常。基本上markersArrayProps
是一个XMLHttpRequest中填充像这样:
markersArrayAreas.push(marker);
再有就是对地图为idle
,做一些计算,看它是否应该放弃的区域标记一个事件侦听器,以及基于边界负载特性标记的地图。无需通过这样的阵列深入细节,但每当这个idle
函数被调用,我的循环:
function clearAreaOverlays() {
if (markersArrayAreas) {
for (i in markersArrayAreas) {
markersArrayAreas[i].setMap(null);
}
}
}
它返回markersArrayAreas[i].setMap()
不是一个函数。只有在页面中包含mootools脚本时,如果我删除mootools,则一切正常。有任何想法吗?
好,感谢大家的输入,并特别感谢贾森指出有关MooTools的阵列原型....使用的mootools .each
功能
markersArrayAreas.each (function (item){
item.setMap(null);
});
解决这个问题的最简单方法是使用模式来重写你的循环:
for(var i=0,l=markersArrayAreas.length, i<l, i++) { if(i in markersArrayAreas) { ... } }
它看起来像你使用markersArrayAreas作为一个标准的整数索引数组。所以,你不应该使用(for i in array)
模式来遍历它。首先,它比使用基于索引的计数循环效率低得多。
但是,此模式遍历对象的所有成员。在你的情况下,MooTools已经用一些更多的自定义函数扩展了Array原型,所以无论你何时创建一个数组,现在除了编号的数组值之外,对象中还有其他属性。如果您打印的值为i
,您应该看到它不再只是数字。
你可以解决这个问题通过检查,以查看是否每个属性名称是指不使用hasOwnProperty
功能从原型继承财产,但同样,这将是要比效率较低。
对于一个快速的基准,显示了这些不同的循环结构的相对表现,在这里看到:http://jsperf.com/for-in-test
你可以命名空间的全局变量。这将需要一些改造的,但它保证让你的东西免受其他脚本:
var my_globals_with_a_very_unique_name_mf = {
// redeclare all your variables in here
}
然后,当你表示这些变量,只要进入对象:
my_globals_with_a_very_unique_name_mf.markersArrayProps
+1'的(我在阵列)`好像平时工作,直到`Array.prototype`通过额外的方法得到丰富,这在MooTools中就是这样。但OP所使用的循环模式仍然是循环遍历一个枚举的糟糕方式。 – BGerrissen 2011-01-29 21:35:12
这并没有工作,仍然markersArrayArea [i] .setMap不是一个功能...我希望这是简单的 – 2011-01-29 21:38:02
你试过检查什么是标记ArrayArray [i] *的值是*?它是否为空,还是未定义,还是它是一些意想不到的对象? – 2011-01-29 21:55:05