Lou*_*pax 12 javascript google-chrome defineproperty
我正在尝试使用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;}
});
}
Run Code Online (Sandbox Code Playgroud)
var myPlayer = new Player(10);
即使writabledefineProperty选项的属性设置为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上
Ing*_*ürk 34
在Mozilla的MDN的Object.defineProperty阐明了这一点:
对象中存在的属性描述符有两种主要形式:数据描述符和访问器描述符.数据描述符是具有值的属性,该值可以是也可以不是可写的.访问器描述符是由getter-setter函数对描述的属性.描述符必须是这两种风格之一; 它不可能两者兼而有之.
这意味着,您可以使用以下任何一种方法:
writable 和 valueget 和 set但你不能使用它们的任何组合.在您的示例中,您指定了writable属性,这意味着它是一个不允许get和set属性的数据描述符.
| 归档时间: |
|
| 查看次数: |
5533 次 |
| 最近记录: |