我正在尝试使用 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 = 新玩家(10);
尽管writable
DefineProperty 选项的属性设置为 false,我收到以下错误:
Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>
当writable
当然设置为 true,但是如果我删除writable
line.
我做错了什么,还是这是一个错误? Google Chrome 版本 30.0.1599.66 上发生这种情况
The Mozilla MDN for Object.defineProperty
澄清这一点:
对象中存在的属性描述符有两种主要类型:数据描述符和访问器描述符。数据描述符是具有值的属性,该值可能是可写的,也可能是不可写的。访问器描述符是由一对 getter-setter 函数描述的属性。描述符必须是这两种风格之一;不可能两者兼而有之。
这意味着,您可以使用其中之一:
-
writable
and value
-
get
and set
但您不能使用它们的任何组合。在您的示例中,您指定writable
属性,这意味着它是一个数据描述符,不允许get
and set
属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)