如果我有一个JavaScript构造函数,我在其原型上设置了destroy方法.是否可以从destroy方法中删除(或至少取消设置)实例?这是我正在尝试做的一个例子.
Klass.prototype = {
init: function() {
// do stuff
},
destroy: function() {
// delete the instance
}
};
k = new Klass
k.destroy()
console.log(k) // I want this to be undefined
Run Code Online (Sandbox Code Playgroud)
我明白我不能简单地this = undefined使用destroy方法,但我认为我可以通过使用这样的超时来解决这个问题:
destroy: function() {
var self = this;
setTimeout( function() {
self = undefined
}, 0)
}
Run Code Online (Sandbox Code Playgroud)
我认为超时函数可以通过self闭包来访问实例(它确实如此),但这似乎不起作用.如果我console.log(self)从该函数内部显示为undefined,但k在全局范围内仍然是一个实例Klass.
有谁知道如何使这项工作?
k是一个指向 的实例的引用Klass。当您作为内部方法调用时,该destroy函数将绑定到您调用方法的对象。现在它是对该 实例的另一个引用。您在那个小闭包中关闭的 是对该实例的另一个引用。当您设置它时,您将清除该引用,而不是其背后的实例。你本身不能真正做到那个实例。您可以忘记它(将所有引用设置为,您将不会再找到它),但这是您所能做到的。KlassthisdestroyKlassselfundefineddestroyundefined
也就是说,请告诉我们您想通过此实现什么目标,我们将很乐意帮助您找到解决方案。