Как добавить свойство к объекту, используя скобки для объекта и строку для имени свойства? - PullRequest
0 голосов
/ 03 апреля 2019

Я хотел бы использовать скобочную запись для записи имени объекта, чтобы я мог ссылаться на него через параметр.Это нормально, но у меня возникают проблемы, когда я пытаюсь написать имя свойства, не передавая его в качестве параметра.Важно, чтобы имя свойства просто записывалось и не передавалось как параметр.Какой правильный синтаксис?

В этом примере показаны все варианты синтаксиса, которые я пробовал:

var foo = {};

bar('foo', 'cat');
function bar(object, prop) {
    
    // foo[prop] = 5; // = 5. This works, but this isn't the method I want to use. 
    
    // [object]cat = 5; // = error
    // [object].cat = 5; // = undefined
    // [object]['cat'] = 5; // = undefined
    // [object][cat] = 5; // = error
    
    console.log('= ' + foo.cat);
}

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Поскольку foo объявлено как глобальная переменная, объект окна будет содержать этот объект внутри.

Таким образом, вы можете сделать следующее:

window[object]['cat'] = 5;

var foo = {};

bar('foo');
console.log('= ' + foo.cat);
function bar(object) {
    window[object]['cat'] = 5;            
}
0 голосов
/ 03 апреля 2019
function bar(object, prop) {
  this[object] = this[object] || {};
  this[object][prop] = 5;
  console.log(foo.cat)
}

надеюсь, это поможет!

0 голосов
/ 03 апреля 2019

Просто передайте фактическую ссылку на объект в:

var foo ={}

bar(foo, 'cat', 3);

console.log('updated foo', foo);

function bar(object, prop, val) {
    object[prop] = val;      
    console.log('= ' + foo.cat);
}
...