對象屬性值設置和獲取


為一個對象添加一個屬性有三種方式
 
一是 通過點運算符
 
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
 
小小的對象屬性值,也是很有意思的~~~
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM