Javascript从子方法访问父属性

时间:2015-10-15 12:57:45

标签: javascript oop

我有一个Campaign对象,其campaign_offer数组属性包含N CampaignOffer个孩子。

我的目标是访问每个Campaign对象中的CampaignOffer对象。

为实现这一目标,我在CampaignOffer对象中添加了一个包含parent对象的Campaign属性。

// Parent
var Campaign = function (properties) {
    this.id = properties.id || null;
    this.campaign_offer = [];
};

// Parent: Add a new child in array of children
Campaign.prototype.addOffer = function (offer) {
    // Pass the parent reference to the child
    offer.parent = this;

    this.campaign_offer.push(offer);
};

// Child
var CampaignOffer = function (properties) {
    this.name = properties.name || null;
    this.parent = properties.parent || null;
};

// ---------------------------------------------

// Create the parent
var campaign = new Campaign({ id: 1 });

// Create the child
var campaign_offer = new CampaignOffer({ name: 'test' });

console.log('Offer without parent', campaign_offer);

// Add the child to the parent
campaign.addOffer(campaign_offer);

console.log('Offer with parent', campaign_offer);

您可以在那里看到结果:Fiddle

问题在于,当您浏览第二个console.log()时。你可以找到太多的递归。像:

parent.campaign_offer[0].parent.campaign_offer[0].parent.campaign_offer[0]...

我理解这个输出但不知道如何避免这种情况。如何定义最大深度?

顺便说一下它没有无限循环。

1 个答案:

答案 0 :(得分:2)

  

我理解这个输出,但不知道如何避免这种情况。如何定义最大深度?

这里没有多个深度,可以说,你只有一个循环引用:

  /---------------------------------------------------------------------\
  |  +----------------+                                                 |
  +->|    campaign    |                                                 |
     +----------------+                                                 |
     | id: xxx        |         +----------+                            |
     | campaign_offer |-------->| (array)  |                            |
     +----------------+         |----------+        +----------------+  |
                                | 0        |------->| campaign_offer |  |
                                +----------+        +----------------+  |
                                                    | name: xxx      |  |
                                                    | parent         |--/
                                                    +----------------+

循环引用很好,只要你不编写遍历它们的代码而不知道它们可能存在,因为代码可能最终会永远循环。

在这种情况下,我没有看到任何需要,似乎CampaignOffer Campaigncampaign_offer有意义,但我没有看到太多指向converse(GL_CLAMP_TO_EDGE数组)。但同样,这很好,只是不要编写试图遵循这些的代码,因为它们没有结束。