繁体   English   中英

在删除对象之前运行Javascript清理代码?

[英]Run Javascript clean-up code before object deletion?

我认为这是不可能的,但是我还是想问一下。 例如,假设我有一个构造的对象,该对象在其范围内与另一个[private]变量紧密耦合:

(function() {

    var coupledVariable = "test", id = 0;
    function Constructor() { this.id = id++; }
    Constructor.prototype.talk = function() {
        if (this.id === 0) { console.log(coupledVariable); }
        else { console.log("something else"); }
    };
    var c = new Constructor();
    c.talk(); // "test"
    new Constructor().talk(); // "something else"
    delete c;

})();

有没有一种方法可以删除第一个对象c时自动删除coupledVariable ,因为它仅与该对象有关。 我喜欢将其与构造函数分开,因为那样的话它是私有的(即不可访问,除了通过函数),但这意味着在删除对象时不会进行垃圾回收。 如果有一个“删除”事件侦听器在对象删除之前运行,我可以放置一些代码,但是我认为没有,那会很好。

没错,这是不可能的。 JavaScript中没有析构函数-而且您也无法delete实例

我喜欢将其与构造函数分开,因为那样是私有的(即无法访问,除非通过函数)

您仍然可以在构造函数内部将其私有化:

var id = 0;
function Constructor() {
    this.id = id++;
    if (this.id === 0) {
        var coupledVariable = "test";
        this.talk = function() {
            console.log(coupledVariable);
        };
    }
}
Constructor.prototype.talk = function() {
    console.log("something else");
};

为什么不在该原型上编写您自己的函数(例如Constructor.prototype.delete)。 并在每次需要删除私有对象和删除私有数据时调用它。

我建议您维护一个对象var CoupledVariable = {}; 里面的数据。 这样您才能真正删除该对象上的键。 如果您也将对象实例存储在一个对象(名称空间)中,则删除可能会在对象实例上起作用,否则正如Bergi所述,您无法像这样真正地删除对象实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM