为一个对象添加一个属性有三种方式   一是 通过点运算符   let obj = {};   obj.someKey= 'hello world';     二是  通过[] 中括号   let obj = {};   obj['someKey'] = 'hello world';       三是  Object对象defineProperty方法设置   对象里目前属性描述有2种形式  数据描述和存取描述。   数据描述 是对象属性的基本的描述,包括 删除、遍历(枚举)、重新赋值、值   // 数据描述 let obj = {}; undefined Object.defineProperty(obj, 'a', {     configurable:true,   // 值true 该属性可被删除或是是重新配置, 默认值是false     enumerable:true,     // true可遍历, 默认值是false     writable:true,       // true可重新赋值, 默认值是false     value:'a' })     存取描述主要对过程描述的,由get 、 set 实现的   // 存取描述 let obj = {}; Object.defineProperty(obj, 'a', {     get(){         console.log(111);     },     set(val){         console.log(val);     } })   运行结果 对象属性值设置和获取 随笔 第1张 对象属性值设置和获取 随笔 第2张 存取描述,是对象属性值在读取或是设置的时候执行     注意,存取描述符和数据描述符中, configurable、enumerable、 value、 writable默认值及设置时不同的 对象属性值设置和获取 随笔 第3张   存取描述很有意思的,在双向数据绑定中使用。     //////存档实现,把同一个对象同一个属性每次设置的值进行存储   function Archiver (val) {     let archive = [];     let middle = null;         Object.defineProperty(this, 'val',{         get(middle){             console.log('get');             return middle         },         set(value){             middle = value;             archive.push({val: middle});         }     })          // 利用闭包把每次设置的值存放在变量中     this.getArchive = ()=>{           return archive;     } } let o1 = new Archiver();     o1.val = 2; o1.val = 3; o1.val = 4;     console.log(o1.getArchive()); 对象属性值设置和获取 随笔 第4张 对象属性值设置和获取 随笔 第5张     “ 哪有什么可以直接登顶的人生,只有根据反馈不断迭代个过程”干了这晚鸡汤~~~     -----------------------------------------------------------------------------   补充知识点   // 创建一个对象,其原型指向null,  就没有__proto__属性,也就不会有继承属性 let obj = Object.creat(null);     对象属性值设置和获取 随笔 第6张 对象属性值设置和获取 随笔 第7张     直接定义的对象,有默认的__proto__, 原型是Object 对象属性值设置和获取 随笔 第8张 对象属性值设置和获取 随笔 第9张   小小的对象属性值,也是很有意思的~~~      
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄