我不认为这是可能的,但我想我还是会问。例如,假设我有一个构造对象与其范围内的另一个[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;
})();
当第一个对象coupledVariable
被删除时,我是否还可以自动删除c
,因为它只与该对象相关。我喜欢将它与构造函数分开,因为这样它是私有的(即通过函数除外是不可访问的),但这意味着当删除对象时它不会被垃圾收集。如果有一个"删除"那就太好了。在删除对象之前运行的事件侦听器,我可以放置一些代码,但我认为没有。
答案 0 :(得分:1)
你是对的,这是不可能的。 JavaScript中没有析构函数 - you cannot delete
instances anyway。
我喜欢将它与构造函数分开,因为这样它是私有的(即通过函数除外不可访问)
你仍然可以在构造函数中保持私有:
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");
};
答案 1 :(得分:1)
为什么不在该原型上编写自己的函数(比如Constructor.prototype.delete)。并在每次需要删除私有对象并删除私人数据时调用它。
我建议你维护一个对象var coupledVariable = {};和里面的数据。这样你就可以删除该对象上的密钥。如果你也将对象实例存储在一个对象(一个名称空间)中,那么删除可能会在对象实例上工作,否则就像Bergi所提到的那样,你不能真正删除对象实例。