[英]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.