对象属性值设置和获取
为一个对象添加一个属性有三种方式 一是 通过点运算符 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); } }) 运行结果
存取描述,是对象属性值在读取或是设置的时候执行 注意,存取描述符和数据描述符中, configurable、enumerable、 value、 writable默认值及设置时不同的
存取描述很有意思的,在双向数据绑定中使用。 //////存档实现,把同一个对象同一个属性每次设置的值进行存储 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());
“ 哪有什么可以直接登顶的人生,只有根据反馈不断迭代个过程”干了这晚鸡汤~~~ ----------------------------------------------------------------------------- 补充知识点 // 创建一个对象,其原型指向null, 就没有__proto__属性,也就不会有继承属性 let obj = Object.creat(null);
直接定义的对象,有默认的__proto__, 原型是Object
小小的对象属性值,也是很有意思的~~~
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄





更多精彩