属性类型
ECMAScript中有两种属性:数据属性、访问器属性
1.数据属性
数据属性有4个描述其行为到特性
[[configurable]] 表示能否通过delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性
[[Enumnberable]] 表示能否通过for-in循环返回属性。
[[Writable]] 表示能否修改属性的值
[[Value]] 包含这个属性的数据值
要修改属性默认的特性,必须使用Object.defineProperty, 如果修改了configurable为false,那么再调用上面的方法去修改writable之外的特性都会导致错误
2.访问器属性
有如下4个特性
[[configurable]] 表示能否通过delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性
[[Enumnberable]] 表示能否通过for-in循环返回属性。
[[Get]] 在你读取属性时调用的函数,默认值为undefined
[[Set]] 在写入属性时调用的函数 访问器属性不能直接定义,必须使用Object.defineProperty()来定义
3.定义多个属性
ECMAScript5定义了Object.defineProperties()方法,利用这个属性可以一次定义多个属性
4.读取属性的特性
使用ECMAScript5的Object.getOwnPropertyDescriptor()方法可以取得给定属性的描述符,返回值是一个对象,对象的属性分别对应数据属性或者访问器属性的4个特性
var book = {}
Object.defineProperties(book, {
_year: {
value: 2004
},
edition: {
value: 1
},
year: {
get: function () {
return this._year
},
set: function (newValue) {
if (newValue > 2004) {
this._year = newValue
this.edition += newValue - 2004
}
}
}
})
var descriptor = Object.getOwnPropertyDescriptor(book, 'year')
console.log(descriptor.value) // 2004