Come impostare dynamicmente i valori di un object Javascript?

È difficile spiegare il caso a parole, vorrei fare un esempio:

var myObj = { 'name': 'Umut', 'age' : 34 }; var prop = 'name'; var value = 'Onur'; myObj[name] = value; // This does not work eval('myObj.' + name) = value; //Bad coding ;) 

Come posso impostare una proprietà variabile con valore variabile in un object JavaScript?

 myObj[prop] = value; 

Questo dovrebbe funzionare Hai confuso il nome della variabile e il suo valore. Ma l’indicizzazione di un object con stringhe per ottenere le sue proprietà funziona bene in JavaScript.

 myObj.name=value 

o

 myObj['name']=value (Quotes are required) 

Entrambi sono intercambiabili.

Modifica: Immagino che intendessi myObj[prop] = value , invece di myObj [nome] = valore. La seconda syntax funziona bene: http://jsfiddle.net/waitinforatrain/dNjvb/1/

È ansible ottenere la proprietà nello stesso modo in cui la si imposta.

 foo = { bar: "value" } 

Imposta il valore foo["bar"] = "baz";

Per ottenere il valore foo["bar"]

restituirà “baz”.

Quando crei un object myObj come hai fatto, myObj più come un dizionario. In questo caso, ha due chiavi, name ed age .

Puoi accedere a questi dizionari in due modi:

  • Come un array (es. myObj[name] ); o
  • Come una proprietà (es. myObj.name ); si noti che alcune proprietà sono riservate, quindi è preferibile il primo metodo.

Dovresti essere in grado di accedervi come una proprietà senza problemi. Tuttavia, per accedervi come array, dovrai trattare la chiave come una stringa.

 myObj["name"] 

Altrimenti, javascript assumerà che il name sia una variabile e poiché non hai creato una variabile chiamata name , non sarà in grado di accedere alla chiave che stai aspettando.

Potresti anche creare qualcosa che sarebbe simile a un object valore (vo);

SomeModelClassNameVO.js;

 function SomeModelClassNameVO(name,id) { this.name = name; this.id = id; } 

Di quanto tu possa semplicemente fare;

  var someModelClassNameVO = new someModelClassNameVO('name',1); console.log(someModelClassNameVO.name); 

semplice come questo myObj.name = value;

La tua domanda è sbagliata: funziona, ma hai commesso un errore. Hai scritto ” myObj[name] ” quando sono abbastanza sicuro che intendevi scrivere ” myObj[prop] “.