210 votes

Comment un objet Javascript peut-il se référer à des valeurs en soi?

Disons que j'ai le javascript suivant:

 var obj = {
 key1 : "it ",
 key2 : key1 + " works!"
};
alert(obj.key2);
 

Cette erreur avec "key1 n'est pas défini". j'ai essayé

 this.key1
this[key1]
obj.key1
obj[key1]
this["key1"]
obj["key1"]
 

et ils ne semblent jamais être définis.

Comment faire en sorte que key2 se réfère à la valeur de key1?

205voto

pencilCake Points 9155

Peut-être que vous pouvez penser à supprimer l'attribut d'une fonction. Je veux dire quelque chose comme ça:

 var obj = {
 key1 : "it ",
 key2 : function() {return this.key1 + " works!";}
};

alert(obj.key2());
 

59voto

user187291 Points 28951

Ceci peut être réalisé en utilisant la fonction constructeur au lieu de littéral

 var o = new function() {
  this.foo = "it";
  this.bar = this.foo + " works"
}

alert(o.bar)
 

44voto

Tgr Points 11766

Vous ne pouvez pas faire référence à une propriété d'un objet avant d'avoir initialisé cet objet; utilisez une variable externe.

 var key1 = "it";
var obj = {
  key1 : key1,
  key2 : key1 + " works!"
};
 

En outre, ce n'est pas un "objet JSON"; c'est un objet Javascript. JSON est une méthode de représentation d'un objet avec une chaîne de caractères (code JavaScript valide).

23voto

Delan Azabani Points 33013

Parce que la déclaration définissant obj n'a pas fini, key1 n'existe pas encore. Considérez cette solution:

 var obj = { key1: "it" };
obj.key2 = obj.key1 + ' ' + 'works!';
// obj.key2 is now 'it works!'
 

19voto

T.J. Crowder Points 285826

Ce n'est pas un objet JSON , c'est un objet Javascript créé via une notation littérale d'objet. (JSON est un sous-ensemble de la notation littérale d'objet.)

Autant que je sache, il n'y a aucun moyen dans le littéral d'objet de faire référence à une autre clé de ce même littéral, car il n'y a pas encore de référence à l'objet en cours de création.

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