使用 setter 方法更新现有对象值

Update existing object values using the setter method

我有一个使用 setter 方法的对象 model:

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

请提示如何使用 setter 方法 更新 对象的现有值并处理一些数学运算。 例如,我调用 setter 方法并传递值:

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

结果应该是return:

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

obj = {x:10, y: 20, p: 15}; 不是对象的 "passing" 参数 - 这是对 obj 本身的赋值(您正在覆盖 obj 的先前定义)!

试试看(就像你在下面做的几行一样):

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

这是另一种处理方法。

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}