访问器属性特性
访问器属性:这个属性不包含数据值,包含的是一对get和set方法,在读写访问器属性时,就是通过这两个方法来进行操作处理的。
访问器属性包含的四个特性:
[[Configurable]]------>>表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性, 默认为false
[[Enumerable]]------->>表示能否通过for-in循环返回属性,默认为false
[[Get]]-------->>在读取属性时调用的函数,默认值为undefined
[[Set]]-------->>在写入属性时调用的函数,默认值为undefined
//访问器属性:这个属性不包含数据值,包含的是一对get和set方法,在读写访问器属性时,就是通过这两个方法来进行操作处理的。
var book = {
_year:2020, //下划线表示是内部属性,只能通过对象的方法来读写
editor: 1
}
//访问器属性 Object.defineProperty(obj, prop, descriptor)
// 1. obj:必需。目标对象
// 2. prop:必需。需定义或修改的属性的名字
// 3. descriptor:必需。目标属性所拥有的特性
// 可以使用`Object.defineProperty`定义新属性或修改原有的属性。
Object.defineProperty(book, 'year', {
// get 函数 如果只写了get方法,当前的year属性就是只读的
get: function () {
// 返回私有属性
return this._year;
},
//修改 // 若只指定get方法,不指定set方法,那就默认该属性是只读的
set:function (newYear) {
//判断 如果两个值不同
if (newYear !== this._year) {
this._year = newYear;
this.editor++
}
}
})
// 测试访问属性中的get,set方法
console.log('未修改的year:' + book.year); //未修改的year:2020
book.year = 2023;
console.log('修改后的year:' + book.year); //修改后的year:2023
console.log('修改year后的editor:' + book.editor); //修改year后的editor:2
// 访问器属性可以通过Object.getOwnPropertyDescriptor()查询
console.log(Object.getOwnPropertyDescriptor(book, '_year')); //{ value: 2023, writable: true, enumerable: true, configurable: true }
由此可以想到vue的双向数据绑定
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。