javascript - 如何删除 javascript 对象(John Resig - 简单继承)?

标签 javascript oop

我的代码:

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/

相关文章:

c# - 为什么 json 序列化器不符合多态性?

c - 为 Cocoa(touch) 开发创建自己的库的指南

javascript - 使用 Javascript 或 PHP 打乱表

javascript - 克隆选定的元素

javascript - Firebug 调试问题

javascript - 如何在 JavaScript 的构造函数中重写继承对象的属性?

c# - 我的文档类应该有打印方法还是应该有一个专用的打印机类?

javascript - 找到最小切片的绝对和 - codility

matlab - 没有足够的输入参数继承Matlab

java - 对象递归调用彼此方法的示例