Can I reference other properties during object declaration in JavaScript? [duplicate]

I am trying to do something like this:

var obj = {
    a: 5,
    b: this.a + 1
}

(instead of 5 there is a function which I don't want to execute twice that returns a number)

I can rewrite it to assign obj.b later from obj.a, but can I do it right away during declaration?

Answers:

Answer

This should return the correct values:

function () {
   var aVar = 5;
   var bVar = aVar + 1;

return {
    a : aVar,
    b : bVar;  
}
}();
Answer

As it turns out you can't reference an object inside another object unless the first one is a function. But you can do it this way.

    var obj = {
        a: 5
    }

    obj.b = obj.a + 1; // create field b in runtime and assign it's value

If you console.log(obj) you will have

   obj = {
        a: 5,
        b: 6
     } 

This way you keep the object literal structure for the remaining part of the code

Answer

No, in your example, the value of this doesn't refer to the object literal.

You'll need to assign a value to b after the object has been created in order to base it on another property in obj.

Answer

No. this will take the same meaning as it would outside the definition.

Answer

in chrome debugger

> var o = {a: 5, b: this.a+1}
undefined
> o.b
NaN
> o.a
5
Answer

No. this in JavaScript does not work like you think it does. this in this case refers to the global object.

There are only 3 cases in which the value this gets set:

The Function Case

foo();

Here this will refer to the global object.

The Method Case

test.foo(); 

In this example this will refer to test.

The Constructor Case

new foo(); 

A function call that's preceded by the new keyword acts as a constructor. Inside the function this will refer to a newly created Object.

Everywhere else, this refers to the global object.

Answer

There are several ways to accomplish this; this is what I would use:

function Obj() {
    this.a = 5;
    this.b = this.a + 1;
    // return this; // commented out because this happens automatically
}

var o = new Obj();
o.b; // === 6

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.