如何删除javascript对象(John Resig-简单继承)?
我的代码:如何删除javascript对象(John Resig-简单继承)?,javascript,oop,Javascript,Oop,我的代码: myobj = new Object(); classes.testegy = Class.extend({ init: function (token) { console.log("test egy"); setInterval(function () { console.log('hello'); }, 300); }, testt: function () { co
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();
}
});
return:1 click event->4x click=4x console log:(它是由4个shadow对象创建的。您需要定义清理功能。首先,保持对
setInterval
的引用:
init: function(token){
console.log("test egy");
this.interval = setInterval(function() { console.log('hello'); }, 300);
}
然后定义清洗功能(在原型中):
最后在删除之前调用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");
});
在对象定义外部。也可以使用$(“.piii”)。取消绑定('click')。单击(/*handler*/)
内部init
顺便说一句,
.live
方法已经过时。现在使用.on
。setInterval
返回计时器的标识符,然后可以通过clearInterval
停止计时器。在销毁对象之前,需要调用该clearInterval
如果我删除myobj.lel1对象,它将被删除,但
setInterval在testegy类中使用。为什么
因为delete
操作符只是删除对对象的引用,然后垃圾收集器会在某个时刻释放该对象所在的内存。而删除间隔的唯一方法是使用如下clearInterval方法:
...
init: function(token){
console.log("test egy");
this.interval = setInterval(function() { console.log('hello'); }, 300);
},
...
//then before calling delete you need to call clearInterval
clearInterval(obj.interval);
obj = null;
也可以将所有清理合并到单独的方法:
cleanup: function() {
clearInterval(this.interval);
}
您还需要调用
clearInterval
cleanup: function() {
clearInterval(this.interval);
}