【发布时间】:2013-10-13 19:27:49
【问题描述】:
我正在尝试使用 setter 和 getter 创建一个对象,这是我的代码:
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
【问题讨论】:
-
错误似乎是描述性的......为什么你会有一个不可写属性的getter和setter?
-
在
writable: true和writable: false这两种情况下都会显示错误。这不是很奇怪吗? -
您只能拥有属性
writable和value或get和set,不能混合使用它们。由于您指定了writable,因此您不能使用get或set。见Mozilla MDN -
哦,那是有道理的。这个评论应该是一个答案,所以我可以接受它
标签: javascript google-chrome defineproperty