Як я магу атрымаць бацькоўскі асобнік

у маім праекце я павінен атрымаць асобнік аб'екта, які стварыў яшчэ адзін асобнік другога аб'екта.

Я абышоў гэтую праблему, пасылаючы асобнік у канструктару другога аб'екта, але я шукаю лепшае рашэнне

Напрыклад:

Першы аб'ект (бацькоўскі)

    function AnimalsList()
    {
            var _list = new Array();
            this.List = _list;

            this.Add = function(name)
            {
                    _list.push(new Animal(name),this);
            }
    }

<�Ет> Другі аб'ект (дзіця) ​​

    function Animal(name, parent)
    {
            this.Name = name;

            this.GetList = function()
            {
                    return parent
            }
    }

Я ведаю, што ў гэтым выпадку функцыя «GetList» была больш лагічная, уключанымі ў першым аб'екце, але гэта ўсяго толькі прыклад.

Я спрабаваў выкарыстаць this.constructor , але вяртае функцыю, а не асобнік

Я спадзяюся, што я патлумачыў праблему добра, у мяне дрэнны англійская!

дзякуй

1
Не забудзьцеся адзначыць адказ!
дададзена аўтар Warlock, крыніца
Не забудзьцеся адзначыць адказ!
дададзена аўтар Warlock, крыніца
Просьба прадставіць скрыпку
дададзена аўтар Abilash, крыніца
Тое, што вы выдатна глядзіцца. Іншыя рашэнні будуць залежаць ад чаго і вам трэба бацька для, і дзе.
дададзена аўтар bfavaretto, крыніца
Тое, што вы выдатна глядзіцца. Іншыя рашэнні будуць залежаць ад чаго і вам трэба бацька для, і дзе.
дададзена аўтар bfavaretto, крыніца

9 адказы

Я б рэкамендаваў не выкарыстоўваць канструктар са спасылкай на бацькоўскім спісе, як гэта: Animal (імя, аднаму з бацькоў) . Паколькі жывёла не павінна ведаць пра спіс. Гэта здзелка Спіс сказаць жывёла Такім чынам, мае нязначныя змены « Гэй, чувак, Вы ў маёй калекцыі !» .:

function Animals()
{
    var __list = new Array();

    this.List = __list;

    this.Create = function(name){
        return this.Add(new Animal(name));
    }

    this.Add = function(animal){
        animal.__parent= this;
        __list.push(animal);
        return animal;
    }

    Animals.Parent = function(animal){
        return animal.__parent;
    }
}

function Animal(name)
{
    this.Name = name;
}

<�Моцны> Прыклад: </моцны>

var animalsLikeDogs = new Animals();
var dog = animalsLikeDogs.Create("dog");

var animalsLikeCats = new Animals();
var cat = animalsLikeCats.Create("cat");

Animals.Parent(dog);
Animals.Parent(cat);
0
дададзена
На самай справе вы можаце выдаліць ўласцівасць Parent. Я буду рабіць гэта мяняе прама цяпер.
дададзена аўтар Warlock, крыніца
@JanDvorak, вам гэта падабаецца цяпер?
дададзена аўтар Warlock, крыніца
Так як Animal асобнікі маюць Parent ўласцівасці, не павінен быць канструктарам месца парога ён усталяваны? Тое, што вы на самай справе выказаць здагадку, канцэптуальна, каб выдаліць ўласцівасць цалкам.
дададзена аўтар John Dvorak, крыніца

Я б рэкамендаваў не выкарыстоўваць канструктар са спасылкай на бацькоўскім спісе, як гэта: Animal (імя, аднаму з бацькоў) . Паколькі жывёла не павінна ведаць пра спіс. Гэта здзелка Спіс сказаць жывёла Такім чынам, мае нязначныя змены « Гэй, чувак, Вы ў маёй калекцыі !» .:

function Animals()
{
    var __list = new Array();

    this.List = __list;

    this.Create = function(name){
        return this.Add(new Animal(name));
    }

    this.Add = function(animal){
        animal.__parent= this;
        __list.push(animal);
        return animal;
    }

    Animals.Parent = function(animal){
        return animal.__parent;
    }
}

function Animal(name)
{
    this.Name = name;
}

<�Моцны> Прыклад: </моцны>

var animalsLikeDogs = new Animals();
var dog = animalsLikeDogs.Create("dog");

var animalsLikeCats = new Animals();
var cat = animalsLikeCats.Create("cat");

Animals.Parent(dog);
Animals.Parent(cat);
0
дададзена
На самай справе вы можаце выдаліць ўласцівасць Parent. Я буду рабіць гэта мяняе прама цяпер.
дададзена аўтар Warlock, крыніца
@JanDvorak, вам гэта падабаецца цяпер?
дададзена аўтар Warlock, крыніца
Так як Animal асобнікі маюць Parent ўласцівасці, не павінен быць канструктарам месца парога ён усталяваны? Тое, што вы на самай справе выказаць здагадку, канцэптуальна, каб выдаліць ўласцівасць цалкам.
дададзена аўтар John Dvorak, крыніца

Чаму не толькі гэта:

function Animal(name, parent)
{
        this.Name = name;
        this.List = parent;
}

?

І я падазраю, што вы хацелі напісаць:

_list.push(new Animal(name,this));

а не тое, што ў вас там.

0
дададзена

Як пра гэта:

function AnimalsList()
{
        var _list = new Array();
        this.List = _list;

        function getList() { return _list; } 

        this.Add = function(name)
        {
           var obj = { Name:name, GetList:getList };
           _list.push(obj);
           return obj;
        }
}

тады?

0
дададзена

Як пра гэта:

function AnimalsList()
{
        var _list = new Array();
        this.List = _list;

        function getList() { return _list; } 

        this.Add = function(name)
        {
           var obj = { Name:name, GetList:getList };
           _list.push(obj);
           return obj;
        }
}

тады?

0
дададзена

Вы можаце быць у стане атрымаць гэтую інфармацыю з дапамогай функцыі ў які выклікае ўласцівасць . Гэта не з'яўляецца часткай стандарту ECMAScript, але ён падтрымліваецца усімі асноўнымі браўзэрамі.

Аднак, гэта, верагодна, лепш, каб працягваць рабіць гэта так, як вы робіце гэта цяпер. Ваш бягучы метад з'яўляецца больш відавочным і не звязвае структуру выкліку функцыі праграмы непасрэдна да ўласцівасцяў аб'екта жывёльнага, які, верагодна, лепшая мадэль.

0
дададзена

Вы можаце быць у стане атрымаць гэтую інфармацыю з дапамогай функцыі ў які выклікае ўласцівасць . Гэта не з'яўляецца часткай стандарту ECMAScript, але ён падтрымліваецца усімі асноўнымі браўзэрамі.

Аднак, гэта, верагодна, лепш, каб працягваць рабіць гэта так, як вы робіце гэта цяпер. Ваш бягучы метад з'яўляецца больш відавочным і не звязвае структуру выкліку функцыі праграмы непасрэдна да ўласцівасцяў аб'екта жывёльнага, які, верагодна, лепшая мадэль.

0
дададзена

Канцэптуальна, AnimalList з'яўляецца агрэгатарам, а не бацька аб'ектаў жывёл. Ваш код здаецца нармальна, але я хацеў бы прапанаваць вам змяніць імя зменнай ад "бацькі» да «агрэгатар».

0
дададзена

Канцэптуальна, AnimalList з'яўляецца агрэгатарам, а не бацька аб'ектаў жывёл. Ваш код здаецца нармальна, але я хацеў бы прапанаваць вам змяніць імя зменнай ад "бацькі» да «агрэгатар».

0
дададзена