Javascript GC 应用现有对象

Javascript GC apply existing object

假设我们有一个对象池(又名数组)。然后我们 Constructor.apply(obj, arguments)。

    var obj = objectPool[nextAvailableIndex];
    obj.index = nextAvailableIndex;
    nextAvailableIndex += 1;
    Constructor.apply(obj, arguments);
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

这对现有 Obj 有何影响?内存是否被重用?这有助于避免 GC 吗?是不是本质上和new一样,还是类似但又不同?

假设我们考虑这样的代码片段:

</p> <pre><code>function Constructor() { this.prop = "some_value"; } var objectPool = [{}, {}, {}]; var nextAvailableIndex = 0; function Caller() { var obj = objectPool[nextAvailableIndex]; obj.index = nextAvailableIndex; nextAvailableIndex += 1; Constructor.apply(obj, arguments) }

在这种情况下,当调用者被调用时,每次都会创建一个名为 'obj' 的新局部变量,但在执行调用者之后,该变量将被释放。

就是这样。

What does this do to the existing Obj?

它在其上调用 Constructor,其 this 值设置为 objConstructor 到底做了什么我们不知道,但一般来说它应该初始化一个新实例。

Is the memory reused?

部分取决于 Constructor 的作用,以及它如何处理非新鲜实例。但是,是的,obj 从未被释放,因为它停留在 objectPool 数组中,并且与 new Constructor(…) 相比,没有从 Constructor.prototype 继承的新对象被实例化。