对象属性值设置和获取

为一个对象添加一个属性有三种方式
 
一是 通过点运算符
 
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
 
小小的对象属性值,也是很有意思的~~~
 
 
 
posted @ 2019-04-26 17:48  之乐之  阅读(2442)  评论(0编辑  收藏  举报