问题是我的数组是[[] [] []]而不是[[]]:/
这是我的剧本
function loopobject(array) {
var me = this;
this.array = array;
this.loop = function() {
counter = 0;
while(array.length > counter) {
window[array[counter]]('arg1', 'arg2');
counter++;
}
setTimeout(function(){ me.loop() }, 100);
}
}
var loopinstant = new loopobject(array);
window.onload = loopinstant.loop();
第一次迭代后出现问题。我不知道究竟是什么问题,但我想知道它是否因为它是在一个对象内部,并且一旦重新创建了该函数,它就不记得该数组了吗?
答案 0 :(得分:2)
不要将字符串传递给setTimeout
。
将字符串传递给setTimeout
会使其在全局范围内eval
除了不必要的慢,这意味着它不会看到你的局部变量,包括loop
变量。
相反,您应该将函数本身传递给setTimeout
:
setTimeout(function() { loop(array); }, 100);
此外,loopobject
实际上没有loop
属性,您可以稍后再调用
要创建属性,请将其更改为this.loop = function(...) { ... }
。
请注意,使用正确的setTimeout
不会调用this
回调
您还需要在本地变量中保存this
的副本。
最后,您的window.onload
代码将调用 loop
,然后将结果分配给onload
。
纠正这些问题,您的代码变为
function loopobject(){
var me = this;
this.loop = function(array){
counter = 0;
while(array.length > counter){
window[array[counter]]('arg1', 'arg2');
counter++;
}
setTimeout(function() { me.loop(array); }, 100);
};
}
var loopinstant = new loopobject();
window.onload = function() { loopinstant.loop(array); };
答案 1 :(得分:0)
替换
setTimeout("loop()", 100);
与
setTimeout(function() { loop(array); }, 100);