我有一个父对象,它存储一个子数组并调用它们的一些方法。
var Parent = function ()
{
this.children = []
this.addChildren();
}
Parent.prototype.addChildren = function ()
{
for (var i=0; i < 5; i++)
{
this.children.push(new Child());
}
this.alterChildren();
}
Parent.prototype.alterChildren = function ()
{
this.children.forEach(function (child)
{
if (child.hasSomeProperty.foo)
{
child.alter();
}
});
}
然后是子对象。当某个事件发生在他们身上时,我需要它们被有效地销毁,并且我取消了父母所依赖的属性。
var Child = function ()
{
this.hasSomeProperty = {
foo: 'bar'
};
}
Child.prototype.onDestroyEvent = function ()
{
this.hasSomeProperty = null;
}
然后我想从父的子数组中删除这个子进程并收集子垃圾。有没有一种优雅的方法来做这个没有循环引用或破坏我现有的结构?
答案 0 :(得分:3)
如果您希望孩子向父母发送消息,那么孩子需要引用父母。
Parent.prototype.addChildren = function ()
{
for (var i=0; i < 5; i++)
{
this.children.push(new Child(this));
}
this.alterChildren();
}
Parent.prototype.removeChild = function (child)
{
var i = this.children.indexOf(child);
return this.children.splice(i, 1);
}
和
var Child = function (parent)
{
this.parent = parent;
this.hasSomeProperty = {
foo: 'bar'
};
}
Child.prototype.destroy = function ()
{
this.hasSomeProperty = null;
this.parent.removeChild(this);
}