我试图用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.defineProperty
的Mozilla MDN对此进行了说明:
这意味着,您可以使用以下任意一种:
writable
和value
get
和set
但是您不能使用它们的任何组合。在您的示例中,您指定了
writable
属性,这意味着它是一个数据描述符,不允许使用get
和set
属性。关于javascript - Google Chrome Object.defineProperty中的错误行为?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19349309/