使用getter / setter动态地将未知属性添加到对象

时间:2018-01-03 11:52:46

标签: javascript node.js

我正在尝试向对象添加新属性,从另一个对象的属性中获取它们的名称。我需要为新属性定义setter / getter:

var params = {
  id: 123,
  name: 'Old master'
};

var Master = new function() {
  var values = {};

  for(var key in params) {
    Object.defineProperty(this, key, {
      enumerable: true,
      set: function(value) {
        values[key] = value;
      },
      get: function() {
        return values[key];
      }
    });
  }

  return this;
}()

Master.id = 234;
Master.name = 'New master';
console.log(Master.id); // returns 'New master' but I need '234'

如何定义setter / getters以使它们设置/获取rigth属性?有可能吗?

1 个答案:

答案 0 :(得分:0)

问题出在'var key'中。所以我添加了'use strict';并将'var key'更改为'let key':

'use strict'; 

var params = {
  id: 123,
  name: 'Old master'
};

var Master = new function() {
  var values = {};

  for(let key in params) {
    Object.defineProperty(this, key, {
      enumerable: true,
      set: function(value) {
        values[key] = value;
      },
      get: function() {
        return values[key];
      }
    });
  }

  return this;
}()

Master.id = 234;
Master.name = 'New master';
console.log(Master.id); // now it returns '234'