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?



This should return the correct values:

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

return {
    a : aVar,
    b : bVar;  

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


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.


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


in chrome debugger

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

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


Here this will refer to the global object.

The Method Case; 

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.


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


Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.