如何在原型函数中删除实例是JavaScript

Phi*_*ton 8 javascript

如果我有一个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.

有谁知道如何使这项工作?

Pav*_*ler 4

k是一个指向 的实例的引用Klass。当您作为内部方法调用时,该destroy函数将绑定到您调用方法的对象。现在它是对该 实例的另一个引用。您在那个小闭包中关闭的 是对该实例的另一个引用。当您设置它时,您将清除该引用,而不是其背后的实例。你本身不能真正做到那个实例。您可以忘记它(将所有引用设置为,您将不会再找到它),但这是您所能做到的。KlassthisdestroyKlassselfundefineddestroyundefined

也就是说,请告诉我们您想通过此实现什么目标,我们将很乐意帮助您找到解决方案。