-
拜访器属性个性
拜访器属性:这个属性不蕴含数据值,蕴含的是一对 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 的双向数据绑定