我有一个Campaign
对象,其中包含一个campaign_offer
数组属性,其中包含N CampaignOffer
子项。Javascript从子方法访问父属性
我的目标是访问每个CampaignOffer
对象内的Campaign
对象。
为了达到这个目的,我在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]...
我明白这个输出,但不知道如何避免这种情况。如何定义最大深度?
顺便说一句,它不会造成无限循环。
您的对象具有彼此的引用 - 每次展开属性时,都会看到相同的引用。这不是一个问题 - 你必须明白,当你检查东西的时候它会发生。 –
为什么relationshp必须是双向的?我明白了为什么'CampaignOffer'可能需要引用一个'Campaign'对象,但我看不到任何相反的理由。 (我也称之为'campaign'而不是'parent',但这是一种风格的东西。)你*可以做到这一点,除非你编写试图遍历它的代码并且不理解它可能会是无害的回圈,但我没有看到任何需要。 –