2010-08-02 3 views
1

Можно создать дубликат:
Self-references in object literal declarationsСсылки на другие свойства в создании {} объекта

Как сделать следующее:

var object = { 
    alpha: 'one', 
    beta: **alpha's value** 
} 

без разделения создания объекта на два части?

+0

Хмм .. хорошо, что воняет. Я пытался добавить типы перечисления к моему объекту, например var object = {CURVETYPE: {DIRECT: 0, ROAD: 1}, travel: this.CURVETYPE.DIRECT}, но я вижу, что это разрушит мое красивое пространство имен. .. – Nick

ответ

5

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

var value = 'one'; 
var object = { 
    alpha: value, 
    beta: value 
}; 

Или ... что-то совершенно другой, но вы не можете ссылаться на alpha при выполнении beta, потому что ни одно из свойств еще не создано, пока оператор объекта не работает как целое.

+0

.. Я получаю «o is undefined» – Nick

+1

@BrunoLM - Nope: http://jsfiddle.net/nick_craver/Gnbjq/ Опять 'o' является' undefined', когда вы пытаетесь его использовать. –

0

Вы не можете сделать это с помощью {} создания объекта.

7

Вы не можете, как указано. Самый близкий эквивалент:

var object = new (function() 
{ 
    this.alpha = 'one'; 
    this.beta = this.alpha; 
})(); 

Это использует экземпляр singleton, созданный из анонимной функции. Вы также можете объявить частные поля с var.

0

Другая идея способ создания этого объекта, не загромождая сферы с любыми новыми переменными:

var lit = function(shared) { 
return { 
    alpha: shared.v1, 
    beta: shared.v2, 
    gamma: "three", 
    delta: shared.v1 

}; 
}(
{ 
    v1: "one", 
    v2: "two", 
} 
); 

Одно из этих заявлений вы не знаете, как отступа ....

Смежные вопросы