我的代码:
myobj = new Object();
classes.testegy = Class.extend({
init: function (token) {
console.log("test egy");
setInterval(function () {
console.log('hello');
}, 300);
},
testt: function () {
console.log("luli");
}
});
classes.testketto = Class.extend({
init: function (token) {
console.log("test ketto");
}
});
classes.site = Class.extend({
init: function (token) {
var myobj = new Object();
myobj.lel1 = new classes.testegy();
myobj.lel2 = new classes.testketto();
console.log(myobj);
delete myobj.lel1;
myobj.lel1.testt();
}
});
var class = new classes.site();
如果我删除 myobj.lel1 对象,它将被删除,但 setInterval 会进入 testegy 类。为什么?如何完全删除对象?谢谢
编辑:
一些例子,当不使用setInterval时,使用点击和控制台日志。
classes.testegy = Class.extend({
init: function(token){
console.log("test egy");
$(".piii").live("click", function() {
console.log("hello");
});
},
foo: function() {
console.log("pina");
}
});
classes.testketto = Class.extend({
init: function(token){
console.log("test ketto");
}
});
classes.site = Class.extend({
init: function(token){
var myobj = new Object();
myobj.lel1 = new classes.testegy();
myobj.lel2 = new classes.testketto();
console.log(myobj);
delete myobj.lel1;
myobj.lel1 = new classes.testegy();
delete myobj.lel1;
myobj.lel1 = new classes.testegy();
delete myobj.lel1;
myobj.lel1 = new classes.testegy();
}
});
返回:1 个点击事件 -> 4x 点击 = 4x 控制台日志 :( 创建了 4 个阴影对象。
最佳答案
您需要定义清洁功能。首先,保存对 setInterval
的引用:
init: function(token){
console.log("test egy");
this.interval = setInterval(function() { console.log('hello'); }, 300);
}
然后定义清理函数(在原型(prototype)中):
clean: function() {
clearInterval(this.interval);
}
最后在删除之前调用myobj.lel1.clean()
。
编辑
编辑后的代码的问题是不同的。看看这个:
init: function(token){
console.log("test egy");
$(".piii").live("click", function() {
console.log("hello");
});
}
每当您初始化新对象时,此函数都会添加新处理程序到 .piii
上的单击事件。您所要做的就是使用此代码:
$(".piii").live("click", function() {
console.log("hello");
});
在对象定义之外。或者您可以在 init
内使用 $(".piii").unbind('click').click(/* handler */)
。
.live
方法已过时。立即使用 .on
。
关于javascript - 如何删除 javascript 对象(John Resig - 简单继承)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229300/