Автоматично инициализиране на обекти в js

Попадам на следната грешка в js

Cannot read property 'charlie' of undefined 

Задавам стойност като тази

alpha.beta.charlie.delta.echo = [];

но само алфа и бета се инициализират като обекти. И така, как да инициализирам автоматично обектите charlie и echo като обекти без писане

alpha.beta.charlie = {};
alpha.beta.charlie.delta = {}
alpha.beta.charlie.delta.echo = [];

person Tim Joyce    schedule 04.09.2013    source източник
comment

Актуализирането на вашето Google Repository до версия 15 чрез SDK Manager трябва да разреши проблемите и да елиминира необходимостта от заобиколни решения. Изисква се чист проект.

Android SDK

Това също се споменава в проблем 7432.

  -  person Holf    schedule 04.09.2013
comment
beta изглежда вече не се инициализира, когато съобщението за грешка гласи, че имате достъп до charlie на undefined   -  person Bergi    schedule 04.09.2013
comment
Съгласен съм с @Bergi. Грешката Не може да се прочете свойството „charlie“ на undefined показва, че бета не е дефинирана, така че на този етап е дефинирана само алфа   -  person Robert    schedule 04.09.2013


Отговори (4)


Не го правите - най-доброто, което можете да направите, е нещо като това:

alpha.beta = { charlie: { delta: { echo: [] } } };

Ако не знаете дали обектите все още са инициализирани или не, би било по-безопасно да запазите първата форма и да направите нещо подобно:

alpha.beta                    = alpha.beta || {};
alpha.beta.charlie            = alpha.beta.charlie || {};
alpha.beta.charlie.delta      = alpha.beta.charlie.delta || {}
alpha.beta.charlie.delta.echo = alpha.beta.charlie.delta.echo  || [];
person dc5    schedule 04.09.2013

Трябва да стартирам всички..

alpha={beta:{charlie:{delta:[]}};

тогава alpha.beta.charlie.delta ще бъде вашият [] празен масив;

person Robert    schedule 04.09.2013
comment
Моля, не използвайте == така в кода (вашият израз ще даде false). Направете поне коментар или използвайте символ като ≙ - person Bergi; 04.09.2013

В даден момент трябва да декларирате alpha свойства, една по-кратка версия на това е

alpha.beta.charlie = {
  delta: {
    echo: []
  }
}
person Alberto Zaccagni    schedule 04.09.2013

В javascript не е възможно автоматично инициализиране (освен ако не е от грозни хакове с проксита или с познаване на имената на свойствата преди).

Вместо това просто вложете обектните литерали, за да създадете свойствата директно върху тях, вместо да създавате празни обекти и след това да им поставяте свойства:

alpha.beta = {
    charlie = {
        delta: {
            echo: []
        }
    }
};

или кратко

alpha.beta = {charlie: {delta: {echo: []}}};
person Bergi    schedule 04.09.2013