Как установить значения объекта Javascript динамически?


трудно объяснить дело словами, приведу пример:

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 ;)

Как я могу установить свойство переменной со значением переменной в объект JavaScript?

6 62

6 ответов:

myObj[prop] = value;

Это должно сработать. Вы перепутали имя переменной и ее значение. Но индексирование объекта со строками для получения его свойств отлично работает в JavaScript.

myObj.name=value

или

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

оба они взаимозаменяемы.

Edit: Я предполагаю, что вы имели в виду myObj[prop] = value, вместо myObj[name] = value. Второй синтаксис работает отлично:http://jsfiddle.net/waitinforatrain/dNjvb/1/

вы можете получить свойство так же, как вы его установили.

foo = {
 bar: "value"
}

установить значение foo["bar"] = "baz";

чтобы получить значение foo["bar"]

вернется "баз".

при создании объекта myObj как у вас есть, думайте об этом больше как словарь. В этом случае он имеет два ключа,name и age.

вы можете получить доступ к этим словарям двумя способами:

  • как массив (например,myObj[name]) или
  • как имущества (например,myObj.name); обратите внимание, что некоторые свойства зарезервированы, поэтому предпочтителен первый метод.

вы должны иметь возможность получить доступ к нему как к свойству без каких-либо проблем. Однако, чтобы получить доступ к нему как к массиву, вам нужно будет обработать ключ как строку.

myObj["name"]

в противном случае javascript будет считать, что name - это переменная, и так как вы не создали переменную с именем name, он не сможет получить доступ к ключу, который вы ожидали.

вы также можете создать что-то похожее на объект value (vo);

SomeModelClassNameVO.скриптов;

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

чем вы можете просто сделать;

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

как это просто myObj.name = value;