JavaScript-使用对象的方法

时间:2015-06-05 05:38:18

标签: javascript arrays inheritance circular-reference

我有一个父对象,它存储一个子数组并调用它们的一些方法。

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;
}

然后我想从父的子数组中删除这个子进程并收集子垃圾。有没有一种优雅的方法来做这个没有循环引用或破坏我现有的结构?

1 个答案:

答案 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);
}