2014-11-18 3 views
0

Я изучаю Javascript, и я сталкивался с чем-то, чего не понимаю. Это часть моего объектного кода:Почему я не могу присвоить значение свойства следующему свойству в объявлении объекта?

var monster = 
{ 
    ... 

    //is the animation starting? 
    hiding: true, 
    delayDuration: Math.floor(Math.random() * 60), 
    currentDelay: this.delayDuration, 


    ... 
}; 

Если я console.log (delayDuration) Я получаю значение, но если я console.log (currentDelay) он говорит, что «не определено».

Я не понимаю, почему currentDelay не принимает значение delayDuration. Может кто-нибудь объяснить это?

изменить: @Bergi, почему вы отметили это как дубликат? Я не мог найти свой вопрос в другом месте edit2: yup, это дубликат. По крайней мере, теперь я знаю слова, о которых я спрашивал.

+1

'this' не существует в этот момент в качестве объекта, который вы создаете (по коррекции апографа Берги). Я всегда нашел [это объяснение] (http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html), чтобы быть очень полезным. –

+0

Поскольку this.delayDuration, вероятно, не существует. «this» не относится к объекту монстра, он ссылается на контекст, в котором работает код, и он, вероятно, не имеет свойства delayDuration. Это не является особенностью javascript «this», такой код не будет работать, например, на C#. – svinja

+2

@JeremyMiller: Всегда существует 'this'. Только он не указывает на объект (который еще не существует) – Bergi

ответ

2

В точке создания объекта не определены ни monster, ни какие-либо его свойства. Вы не можете использовать переменную из того же объекта, который находится в процессе построения.

Кроме того, JavaScript использует функцию область видимости, это означает, что значение this будет либо window объекта или будет быть ограниченно до ближайшего экземпляра, который вы создаете с помощью new (или других методов создания экземпляра).

+1

Не совсем. Сам «монстр» еще не определен. – Bergi

+0

'' 'вряд ли когда-либо функция. – Bergi

+0

Спасибо, Берги, я обновляю свой ответ. –