使用 Object.defineProperties 给出两个属性

Jon*_*lls 2 javascript properties ecmascript-5

我正在尝试创建一个对象。但我不明白为什么我的属性 getters setters 不能简单地调用this.bar. 因此,我的 foo 对象似乎最终有两个属性。

这是正确的还是我:

  1. 使用defineProperties错误
  2. 没有抓住要点

foobar属性创建

var foo = function ()
{   
    Object.defineProperties(this, {
        bar : {
            get : function () {return this.barVal},
            set : function(value) { this.barVal = value},
            enumerable: true,
            configurable: true
        }
    })
};

var o = new foo();
o.bar = "Hello";
console.log(JSON.stringify(o));

//output {"bar":"Hello","barVal":"Hello"} 
Run Code Online (Sandbox Code Playgroud)

小智 5

JSON.stringify 激活 getter 来解析属性。您的 setter 设置了第二个属性,因此您最终会看到两个属性。您需要的是一种存储 foo.bar 的“内部”值的方法,该值不是 foo 本身。

function Foo(){
  var secret = {};
  Object.defineProperties(this, {
    bar: {
      get: function( ){ return secret.bar },
      set: function(v){ secret.bar = v },
      enumerable: true,
      configurable: true
    }
  });
}


var foo = new Foo;
foo.bar = 'Hello';
console.log(JSON.stringify(foo));
Run Code Online (Sandbox Code Playgroud)