Ответ 1
myObj[prop] = value;
Это должно сработать. Вы перепутали имя переменной и ее значение. Но индексирование объекта со строками для получения его свойств отлично работает в 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?
myObj[prop] = value;
Это должно сработать. Вы перепутали имя переменной и ее значение. Но индексирование объекта со строками для получения его свойств отлично работает в JavaScript.
myObj.name=value
или
myObj['name']=value (Quotes are required)
Оба они взаимозаменяемы.
Изменить: Я предполагаю, что вы имели в виду myObj[prop] = value
, а не myObj [name] = значение. Второй синтаксис отлично работает: http://jsfiddle.net/waitinforatrain/dNjvb/1/
Вы можете получить свойство так же, как вы его установили.
foo = {
bar: "value"
}
Вы устанавливаете значение
foo["bar"] = "baz";
Чтобы получить значение
foo["bar"]
вернет "baz".
Когда вы создаете объект myObj
, как у вас, подумайте, что он больше похож на словарь. В этом случае он имеет две клавиши: name
и age
.
Вы можете получить доступ к этим словарям двумя способами:
myObj[name]
); илиmyObj.name
); обратите внимание, что некоторые свойства зарезервированы, поэтому предпочтительным является первый метод.Вы можете иметь доступ к нему как к собственности без каких-либо проблем. Однако, чтобы получить доступ к нему как к массиву, вам нужно обработать ключ как строку.
myObj["name"]
В противном случае javascript будет считать, что name
является переменной, и поскольку вы не создали переменную с именем name
, она не сможет получить доступ к ключу, который вы ожидаете.
Вы также можете создать что-то, что было бы похоже на объект value (vo);
SomeModelClassNameVO.js;
function SomeModelClassNameVO(name,id) {
this.name = name;
this.id = id;
}
Чем вы можете это сделать,
var someModelClassNameVO = new someModelClassNameVO('name',1);
console.log(someModelClassNameVO.name);
просто, как это
myObj.name = value;
Ваш вопрос ошибочен - это действительно работает, но вы допустили ошибку. Вы писали "myObj[name]
", когда я совершенно уверен, что вы хотели написать "myObj[prop]
".