我试图用setters和getters创建一个对象,这是我的代码:

var Player = function(height){
    var _height = height;

    Object.defineProperty(this, 'height', {
      enumerable: false
    , configurable: true
    , writable: false
    , get: function(){return _height;}
    , set: function(val){_height = val;}
    });
}

var myPlayer = new Player(10);

即使defineProperty选项的writable属性设置为false,我也会收到以下错误:
Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>
当然,当writable设置为true时,也会发生同样的情况,但是如果我删除writable行,该错误就会消失。

我是在做错什么,还是这是个错误?这发生在Google Chrome版本30.0.1599.66中

最佳答案

Object.definePropertyMozilla MDN对此进行了说明:



这意味着,您可以使用以下任意一种:

  • writablevalue
  • getset

  • 但是您不能使用它们的任何组合。在您的示例中,您指定了writable属性,这意味着它是一个数据描述符,不允许使用getset属性。

    关于javascript - Google Chrome Object.defineProperty中的错误行为?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19349309/

    10-12 12:59