Обновите существующие значения объекта, используя метод установки - PullRequest
0 голосов
/ 25 марта 2020

У меня есть объект с методом установки модель :

var obj = {
   set model(object) {
   //method's logic
   }
}

Я обновляю объект со значениями:

obj = {x:10, y: 20, p: 15};

Теперь объект выглядит :

obj = {
  x:10, 
  y: 20, 
  p: 15
  set model(object){
  //method logic
  }
  };

Пожалуйста, подскажите, как использовать метод установки для обновления существующих значений объекта и обработки некоторых математических операций. Например, я вызываю метод установки и передаю значения:

obj.model = { x: { value: 33, operation: '*' },
z: { value: 75, operation: '+' }, 
p: { value: 4, operation: '%' } };

В результате он должен вернуть:

console.log(obj); // -> {x:330, y: 20, z: 75, p: 3}

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Вот еще один способ справиться с этим.

var obj = {
   set model(object) {
      Object.keys(object).forEach(key => { 
        if (typeof obj[key] === 'undefined' || typeof object[key] !== 'object') {
          obj[key] = typeof object[key] === 'object' 
            ? object[key].value 
            : object[key];
        } else {
          obj[key] = eval(obj[key] + object[key].operation + object[key].value);
        }
      });
   }
}

obj.model = {x:10, y: 20, p: 15};

obj.model = { x: { value: 33, operation: '*' },
z: { value: 75, operation: '+' }, 
p: { value: 4, operation: '%' } };

// Adding new value(s)
obj.model = { a: 123 };

console.log(obj); // -> {x:330, y: 20, z: 75, p: 3}
0 голосов
/ 25 марта 2020

obj = {x:10, y: 20, p: 15}; - это не «передача» аргументов объекту - это присваивание самой obj (вы переопределяете прежнее определение obj)!

вместо этого попробуйте (точно так же, как вы делаю несколько строк ниже):

obj.model = {x:10, y: 20, p: 15};
...