1

階層的な関係にあるオブジェクトを作成する関数を作りたいと思います。したがって、各層オブジェクトは独自の子層オブジェクトのセットを保持し、単一の親オブジェクトをそのすべての兄弟と共有します。私はどんなパターンにも慣れていませんが、このタイプのシナリオをカバーするものがあると思います。

//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がその子の親になりますが、すべてのオブジェクトに対して正しい動作ではないと思います。これを回避する方法がわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

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

私はあなたの質問に少し混乱していたので、私の答えに何か問題があるかもしれません。

現在のように、親を持たない Tier が存在する可能性があります。(パラメータなし) ( var newTier = new Tier(););

パラメータを使用して新しい層を作成すると、親ノードの子に追加されます ( var parentTier = new Tier(); var child = new Tier(parentTier);)。

于 2012-05-07T17:26:03.770 に答える