跳到主要内容

js高级 0.4 -> 理解对象

· 阅读需 3 分钟

属性类型

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