1

Possible Duplicate:
Self-references in object literal declarations

How do I do the following:

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

without splitting the object creation into two parts?

1
  • Hmm.. well that stinks. I was trying to add enum types to my object like var object = { CURVETYPE: {DIRECT: 0, ROAD: 1}, travel: this.CURVETYPE.DIRECT }, but I can see this is going to ruin my nice namespace now... Commented Aug 2, 2010 at 21:53

4 Answers 4

7

You can't, as noted. The closest equivalent is:

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

This uses a singleton instance created from an anonymous function. You can also declare private fields with var.

Sign up to request clarification or add additional context in comments.

Comments

6

You can't, object literal syntax just doesn't support this, you'll have to create a variable first then use it for both, like this:

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

Or...something entirely different, but you can't reference alpha when doing beta, because neither property has been created yet, not until the object statement runs as a whole is either accessible.

2 Comments

.. I'm getting "o is undefined"
@BrunoLM - Nope: jsfiddle.net/nick_craver/Gnbjq Again o is undefined when you're trying to use it.
0

You cannot do that with {} object creation.

Comments

0

Another idea for a way to create that object, without cluttering the scope with any new variables:

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

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

One of those statements you're not sure how to indent....

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.