javascript模式,父母子女兄弟姐妹等级

时间:2012-05-07 17:08:46

标签: javascript oop design-patterns

我想创建一个函数来创建彼此具有分层关系的对象。因此,每个层对象都拥有自己的子层对象集,并与其所有兄弟节点共享单个父对象。我不熟悉任何模式,但我猜有一个可以涵盖这种情况。

//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成为该子项的父项,但对于所有不正确行为的对象。我不知道怎么解决这个问题。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分: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);)中的子项。