JavaScript: Могу ли я определить свойство объекта, используя другое свойство, принадлежащее тому же объекту, используя литеральную запись?

Возможный дубликат:
Передача в динамических парах ключ:значение для литерала объекта?
Литерал объекта Javascript, ссылающийся на другое свойство в себе из другого свойства

var var1 = {};

var1.number = 20;
var1.numberplus3 = var1.number + 3;
console.log(var1.numberplus3);

var var2 = {
    number: 20,
    numberplus3: number + 3
};
console.log(var2);

В этом примере var1.numberplus3 оценивается как 23, а var2.numberplus3 оценивается как "undefined". Почему это?

(Я использую интерпретатор JS из Codecademy: http://labs.codecademy.com/#:workspace )

Спасибо!


person Stanislav Beremski    schedule 26.02.2012    source источник
comment
@Tomasz: Это немного другое ... в данном случае это свойство другого объекта. изменить: О, я ошибся... надо было прочитать заголовок... код меня смутил, извините.   -  person Felix Kling    schedule 26.02.2012
comment
@kinakuta: Ни var2.number, ни this.number не сработают. var2 не работает, потому что на данный момент var2 еще не определено. this будет относиться к контексту, в котором выполняется код (скорее всего, windwow), но 100% не var2.   -  person Felix Kling    schedule 26.02.2012
comment
Упс. Да, я хотел написать numberplus3 = var2.number + 3! Это то, что я на самом деле пытался запустить!   -  person Stanislav Beremski    schedule 27.02.2012


Ответы (1)


вы должны написать так:

var var2 = {
    number: 20,
    numberplus3: function() { return var2.number + 3; }
}

or:

var var2 = {
    number: 20
};
// at this point the var2 object is defined and accessible in the memory
var2.numberplus2 = var2.number+3;
person vdegenne    schedule 26.02.2012
comment
Ага, ладно... так что я должен сделать функцию для работы с тем, что var2 не определен в то время, когда устанавливается numberplus3? Предположительно это связано с тем, что функция в numberplus3 оценивается только после установки var2? - person Stanislav Beremski; 27.02.2012
comment
@StanislavBeremski, вы поняли, вы пытаетесь сослаться на переменную, которая недоступна в памяти, посмотрите правку. - person vdegenne; 27.02.2012
comment
Отлично... Думаю, теперь я понял. Ваше здоровье! - person Stanislav Beremski; 27.02.2012