Javascript 删除自变异对象的实例
拥有一个根据用户请求创建自身新实例的对象。我的问题是关于如何构造它,主要是如何正确地删除实例 基本上是这样的:Javascript 删除自变异对象的实例,javascript,Javascript,拥有一个根据用户请求创建自身新实例的对象。我的问题是关于如何构造它,主要是如何正确地删除实例 基本上是这样的: (function (something) { var collection = {}, counter = -1; function remove(ix) { delete collection[ix]; } function Foo() { collection[++counter] = this;
(function (something) {
var collection = {},
counter = -1;
function remove(ix) {
delete collection[ix];
}
function Foo() {
collection[++counter] = this;
this.index = counter;
this.load();
}
Foo.prototype.load = function () {
/* - Create some element and add it to DOM.
* - Add listeners for events.
* - If "New" is clicked call this.add()
* - If "Remove" is clicked call this.remove()
* */
};
Foo.prototype.add = function () {
var x = new Foo();
};
Foo.prototype.remove = function () {
/* - Remove listeners.
* - Remove element from DOM.
* */
remove(this.index);
};
something.Foo = Foo;
})(this);
var bar = new Foo();
使用这种方法是否可以正确删除“自行创建”的实例?(如将来某个时候收集的GB)有更好的方法解决这个问题吗
我可以说:
delete collection[ix];
从remove()
函数中?或者,调用remove()
时是否必须使用setTimeout()
?或其他事情?你做的很好
执行delete collection[ix]
或collection[ix]=null
都将消除对collection[ix]
值的引用
当然,如果要枚举collection
的属性,最好使用delete
,因为对象现在将从列表中删除。如果仅将其设置为null
,则该值仍将作为集合的属性存在:
设置为null
:
collection["x"] = 1
collection["x"] = null;
console.log(collection)// { x: null }
vs删除
:
collection["x"] = 1
delete collection["x"]
console.log(collection)// {}
是的,“自行创建”的实例只要没有引用,就有资格进行垃圾收集
使用代码var bar=new Foo()创建Foo
的新实例时代码>,您正在创建对实例的两个引用:一个在函数闭包的作用域中(分配给集合
的属性),一个在全局作用域中(分配给条
)
调用bar.remove()时
,您将删除存储在集合中的引用。除非您创建对该实例的其他引用,否则只要删除存储在bar
中的引用,该实例就有资格进行垃圾收集,例如,通过为其分配其他对象。如果要从集合中删除它们,并且代码中其他地方没有其他引用,则垃圾收集器将清理它们<代码>删除集合[ix]
可以很好地从集合
中删除项目,只要ix
是您在将项目添加到集合时在原始构造函数中使用的键。+1我希望看到关于这一点的详细答案很好。我也很怀疑,但必须得到证实。谢谢。看看代码,我想我可以向公众添加一个小启动器,而不是Foo
。成为一个关于是否需要访问主对象的问题。现在我看不到任何变化,如果需要的话,很容易改变。