• 拜访器属性个性

拜访器属性:这个属性不蕴含数据值,蕴含的是一对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:2020book.year = 2023;console.log('批改后的year:' + book.year);   //批改后的year:2023console.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的双向数据绑定