2012-05-07 8 views
1

Я хотел бы создать функцию, которая будет создавать объекты, которые имеют многоуровневое отношение друг к другу. Таким образом, каждый элемент уровня имеет собственный набор объектов дочернего уровня и разделяет один родительский объект со всеми его братьями и сестрами. Я не знаком с какими-либо шаблонами, но я бы предположил, что есть один, чтобы охватить этот тип сценария.javascript pattern, parent children siblings tiers

//constructor 
var Tier = function(parent){ 
    if(parent===undefined)Tier.prototype.Parent = null; 
    else if(parent.constructor===Tier)Tier.prototype.Parent = parent; 
    else return //an error code; 
    //each tiered object should contain it's own set of children tiers 
    this.Children = []; 
    //... 
    //...additional properties... 
    //... 
    this.addChild = function(){ 
     this.Children.Push(new Tier(this)); 
    }; 
} 

Tier.prototype.Parent; //I want this to be shared with all other tier objects on the same tier BUT this will share it between all tier objects regaurdless of what tier the object is on :(
Tier.prototype.Siblings; //should point to the parents child array to save on memory 

Можно ли создать такой объект, где каждый объект уровня содержит свои собственные дети и разделяет родительский объект с его родным братом, но разные уровни разделяют правильные родители. Я считаю, что если я использую что-то вроде выше, когда добавляю новый ребенок, он сделает Tier.prototype.Parent родителем этого дочернего элемента, но для всех объектов, которые не являются правильными. Я не уверен, как обойти это.

Любая помощь очень ценится.

+0

Вы хотите, чтобы один родитель? –

+0

Итак, хотите ли вы получить всех братьев и сестер, если они получили родителя? просто спрашивая bcoz, работая над ответом, я немного смутил эту вещь. –

+0

да каждый уровень имеет ровно один родитель и 1 или более детей и 0 или более братьев и сестер – 0xor1

ответ

2

Я не знаю, если я получил это право, но попробуйте это:

// class Tier 
function Tier(parentT) { 
    var Parent; 

    if((typeof parentT) == undefined) { 
     Parent = null; 
    } else if(parentT instanceof Tier) { 
     Parent = parentT; 

     parentT.addChildren(this); 
    } else { 
     Parent = null; 
    } 

    var Children = []; // private; if you want it public you can use this.Children 

    this.addChildren = function(newChild) { 
     Children.push(newChild); 
    }; 
    this.getParent = function() { 
     return Parent; 
    }; 
    this.getChildren = function() { 
     return Children; 
    }; 
} 

Я был немного смущен ваш вопрос, так что может быть что-то не так с моим ответом.

Как и сейчас, может существовать уровень без родителя. (без параметров) (var newTier = new Tier(););

Если вы создадите новый уровень с параметром, он будет добавлен к дочерним элементам в родительском узле (var parentTier = new Tier(); var child = new Tier(parentTier);).

+1

всегда используют 'typeof parentT === 'undefined'' вместо' parentT == undefined'. Сделал простой jsfiddle, чтобы показать одну из причин, почему «parentT == undefined» опасен. http://jsfiddle.net/kW5XB/ – Kirstein

+0

О, я наблюдал за этим xD. Я просто скопировал части кода выше. Благодарю. –

+0

ohk! поэтому теперь я понимаю, почему в правилах плагина jquery просят нас ожидать, что переменная называется undefined. до сих пор, подумал я, у них эти мусорные гайки или что? хе-хе ... хороший номер –

Смежные вопросы