47 votes

Puis-je faire référence à d'autres propriétés pendant la déclaration d'un objet en JavaScript ?

J'essaie de faire quelque chose comme ça :

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

(au lieu de 5, il y a une fonction que je ne veux pas exécuter deux fois et qui renvoie un nombre)

Je peux le réécrire pour assigner obj.b plus tard de obj.a mais puis-je le faire tout de suite pendant la déclaration ?

43voto

Ivo Wetzel Points 27802

Non. this en JavaScript ne fonctionne pas comme vous le pensez. this dans ce cas, fait référence à l'objet global.

Il n'y a que 3 cas dans lesquels la valeur this se met en place :

Le cas de la fonction

foo();

Ici this fera référence à la mondial objet.

Le cas de la méthode

test.foo(); 

Dans cet exemple this se référera à test .

Le cas du constructeur

new foo(); 

Un appel de fonction qui est précédé de la balise new agit comme un constructeur. A l'intérieur de la fonction this fera référence à une nouvelle créé Object .

Partout ailleurs, this fait référence à l'objet global.

11voto

ken Points 1925

Il existe plusieurs façons d'y parvenir ; voici celle que j'utiliserais :

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

7voto

Kevin Points 57797

Cela devrait renvoyer les valeurs correctes :

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

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

5voto

Herbi Shtini Points 1035

Il s'avère que vous ne pouvez pas référencer un objet à l'intérieur d'un autre objet, sauf si le premier est une fonction. Mais vous pouvez le faire de cette façon.

    var obj = {
        a: 5
    }

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

Si vous console.log(obj), vous aurez

   obj = {
        a: 5,
        b: 6
     } 

De cette façon, vous conservez la structure de l'objet littéral pour le reste du code.

2voto

hvgotcodes Points 55375

Dans le débogueur de chrome

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X