Можно ли динамически назначать сеттер объекту?

Можно ли назначить объекту сеттер из функции? Например:
obj = {
  customProps = {},

  // по-старому, так работает:
  setter(name, val) { // какая-то своя функция сеттер
    console.log("Obj property " + name + " is set to " + value);
    this.customProps[name] = val;
  },

  set foo(val) { this.setter( "foo", val); }, // НО не хочется писать такое для каждого свойства

  // можно ли как-то так:
  assignSetter: function(name) {
    this set [name](val) { this.setter( name, val); };
  },

  init: function(propsArray) {
    propsArray.forEach(function(name) { this.assignSetter(name); });
  }
};

obj.init(['bar', 'baz', 'propA', 'propB']); // Вжух! – и назначились сеттеры для каждого свойства
// а потом попозже ещё добавить:
obj.assignSetter('zzz'); // и можно obj.zzz = 'ZZZ'; и выведется в консоль запись
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
alvvi
@alvvi
export default apathy;
Object.defineProperty(obj, prop, descriptor)
Это то что вам нужно, на сайте с докой есть пример:
// Example of an object property added
// with defineProperty with an accessor property descriptor
var bValue = 38;
Object.defineProperty(o, 'b', {
  // Using shorthand method names (ES2015 feature).
  // This is equivalent to:
  // get: function() { return bValue; },
  // set: function(newValue) { bValue = newValue; },
  get() { return bValue; },
  set(newValue) { bValue = newValue; },
  enumerable: true,
  configurable: true
});

Ссылка
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы