我写了一些代码,当你点击一个按钮时,它会向一个数组添加一个函数实例,
var objects = [];
$(document).on("click", ".addButton", function(){
objects.push(new newObject(1));
});
function newObject(amount){
setInterval(function(){
addValue(amount);
}, 1000);
}
然后每秒创建的每个新对象每秒都会继续运行addValue函数,增加数量。
问题是当我尝试使用objects.pop()销毁该函数时,它会删除该对象,但setInterval不会停止运行。
如何使其破坏该功能中的所有内容并阻止其运行?
答案 0 :(得分:4)
JS中的setInterval没有类似的东西。我建议声明一种处理清理的方法。
// "Class" declaration
function newObject(amount) {
var id = setInterval(function() {
addValue(amount);
}, 1000);
this.kill = function() {
clearInterval(id);
}
}
// "Public" api for the data structure
var objects = [];
function addNewObject() {
objects.push(new newObject(1));
}
function destroyLastObject() {
objects.pop().kill();
}
// Event bindings
$(document).on("click", ".addButton", addNewObject);
$(document).on("click", ".removeButton", destroyLastObject);
完全未经测试,但沿着这些方针应该有效。
修改的
这个,imo,是学习javascript中不同模式的一个很好的资源 - 很长但非常值得阅读:https://addyosmani.com/resources/essentialjsdesignpatterns/book/
答案 1 :(得分:0)
你必须找到要检查的东西以清除间隔。我正在根据数组长度清除。它只执行一次。
// you got to find something to check against to clear the interval
var objects = [];
document.addEventListener("click", function(){
console.log('click');
objects.push(new newObject(1));
});
function newObject(amount){
var interval= setInterval(function(){
if(objects.length !==0){
clearInterval(interval);
}
}, 1000);
}