我有一个使用 setInterval 运行的函数,它从单击按钮的 ID 获取变量。有没有更好的方法可以做到这一点,而不必每次都为新变量编写所有开关 block ? 可以为变量动态调用 setInterval 吗?
我不知道如何表达这个问题,但是这样的事情是可能的吗? 使用包含项目的数组并为数组内的项目调用 setInterval?
像这样:
allitems.wood
然后调用 allitems[item] = setInterval( function() { gather(allitems[item]); }, time );
这就是我现在的做法,但每次我包含一个新项目时,我都必须重新编写所有案例部分......
switch(item){
case "wood":
getwood = setInterval( function() { gather(item); }, time );
break;
case "planks":
makeplanks = setInterval( function() { gather(item); }, time );
break;
case "stone":
getstone = setInterval( function() { gather(item); }, time );
break;
case "leather":
getleather = setInterval( function() { gather(item); }, time );
break;
case "iron":
getiron = setInterval( function() { gather(item); }, time );
break;
}
最佳答案
您建议的解决方案非常正确。您可以使用括号表示法来访问对象属性,因此您可以使用变量来动态访问它们。
以下代码将收集木头 6 秒,停止后开始收集石头(纯粹是为了示例目的)。
var allItems = {
wood: 0,
planks: 0,
stone: 0
};
var time = 2000;
function getItem(item) {
allItems[item] = setInterval(function() {
gather(item);
}, time);
}
function gather(item) {
console.log("gathering " + item);
}
getItem("wood");
setTimeout(function() {
clearInterval(allItems.wood);
getItem("stone");
}, 6000);
关于javascript - 动态设置多个 setInterval(s) 并存储以供以后访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175383/