【问题标题】:Destroy 'this' with Javascript?用 Javascript 销毁“这个”?
【发布时间】:2014-04-03 21:54:02
【问题描述】:

如何在函数内销毁“this”,以便从函数内销毁函数的实例。如果纯 javascript 无法做到这一点。原型有可能吗?所以是这样的:

this = nil

或类似的东西:

prototype.destroy(this)

我不知道prototype 或javascript 是否内置了类似的东西。有没有我可以调用的函数可以轻松地从实例外部销毁实例?

谢谢

【问题讨论】:

  • 您能否提供一个更完整的代码示例,以便我们理解“为什么”?
  • this 到底是什么,您不能破坏关键字,但您可能会破坏引用,具体取决于它引用的内容。还有nil
  • +1 @KevinB 表示“你能不能多一点……”同时抱怨明显的推理,+1 @adeno 表示抱怨“nil”但不理解 OP 显然是什么意思“this” ,并 +1 @Mosho 链接到真实答案

标签: javascript prototypejs


【解决方案1】:

您不能在 javascript 中销毁 this,甚至尝试这样做与 javascript 中垃圾收集的方式背道而驰。此外,您不能在 javascript 中分配给this

您不会在 javascript 中手动释放内容。相反,您清除对 javascript 中对象的所有引用,并且当没有其他代码引用 javascript 中的对象时,然后垃圾收集器才会释放它。

由于 javascript 不允许您分配 this 指针,因此当您处于将 this 设置为特定对象的函数中时,您根本无法以任何方式释放该对象在那一刻。您可以确保没有其他对象引用您的对象,然后,当此方法完成时,如果没有其他对象引用该对象,则垃圾收集器将释放该对象。

垃圾收集系统中的内存管理与非垃圾收集语言中的完全不同。你不会自己释放东西。您清除对事物的引用,以便 GC 稍后可以在没有其他对它们的引用时清理这些对象。

这是一个例子。假设您有这个对象,其属性存储在全局变量中:

// declare global object and add property to it
var myGlobalObject = {};
myGlobalObject.greeting = "Hello";

您永远不会显式释放该全局变量,但如果您希望它指向的对象被垃圾收集器释放,那么您只需清除对该对象的引用:

myGlobalObject = null;

然后,GC 将看到不再有任何代码引用了myGlobalObject 曾经指向的对象,并且由于该对象现在无法被任何代码访问,因此它将被 GC 释放。

【讨论】:

    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 2012-01-12
    • 2012-05-02
    • 1970-01-01
    • 2014-12-23
    • 2016-08-09
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多