Accessor属性特点Accessor属性:该属性不包含数据值,但包含一对get和set方法。在读写accessorproperties时,就是通过这两个方法来进行操作的。accessor属性包含的四个特性:[[Configurable]]------>>表示是否可以通过delete删除属性重新定义属性,是否可以修改属性,是否可以修改属性作为访问器属性,默认为false[[Enumerable]]-------->>表示该属性是否可以通过for-in循环返回,默认为false[[Get]]------->>读取属性时调用的函数,默认值为undefined[[Set]]-------->>写属性时调用的函数,默认值为undefined//accessor属性:该属性不包含data值,包含一对get和set方法。在读取和写入访问器属性时,就是通过这两个方法来处理操作的。varbook={_year:2020,//下划线表示是内部属性,只能通过对象编辑器的方法读写:1}//访问属性Object.defineProperty(obj,prop,descriptor)//1.obj:必需。目标对象//2.prop:必需。要定义或修改的属性的名称//3.descriptor:必填。目标属性拥有的属性//您可以使用`Object.defineProperty`定义新属性或修改现有属性。Object.defineProperty(book,'year',{//如果get函数只写get方法,则当前年份属性为只读get:function(){//返回私有属性returnthis._year;},//修改//如果只指定了get方法,没有指定set方法,则该属性默认为只读set:function(newYear){//判断两个值是否不同if(newYear!==this._year){this._year=newYear;this.editor++}}})//测试访问属性中的get和set方法console.log('unmodifiedyear:'+book.year);//未修改年份:2020book.year=2023;console.log('修改年份:'+book.year);//修改年份:2023console.log('修改年份后的编辑器:'+book.editor);//修改年份编辑器后:2//访问器属性可以通过Object.getOwnPropertyDescriptor()console.log(Object.getOwnPropertyDescriptor(book,'_year'));//{value:2023,writable:true,enumerable:true,configurable:true}由此我们可以想到vue的双向数据绑定
