前端知识总结

js对象属性

2019-07-09  本文已影响0人  青色琉璃

数据属性

var obj = {
    age:20,
    name:'ming'
}
// 对于直接在字面量中定义的属性,configurable,writable,enumerable属性都是true

// 对于在defineProperty中定义的属性,configurable,writable,enumerable属性都是false
Object.defineProperty(obj,'name',{
    writable:false,   // 不写也没关系,反正都是false
    configurable:true,
    value:'dong'
})
console.log(obj.name)   // dong
obj.name="wei";
console.log(obj.name)   //dong,因为不能修改

console.log(Object.getOwnPropertyDescriptor(obj,'name'))  // 查看属性

delete obj.name;
console.log(obj)   //{name:20}  name属性被删除了

console.log(Object.getOwnPropertyDescriptor(obj,'name'))  // undefined,没有name属性了

访问器属性

var person = {
    _year:2010,
    age:0,
}
// 这里year必须要用_year来保存自己的值,否则在get中获取自身的值,会一直循环
Object.defineProperty(person,'year',{
    get:function(){
        console.log('get')
        return this._year;
    },
    set:function(newYear){
        if(newYear>this._year){
            console.log('set')
            this.age=newYear-this._year;
            this._year = newYear;
            return this.age;
        }
        
    },
    configurable:false
})
        
person.year = 2019;
console.log(person.age);    // set 9
console.log(person.year);   // get 2019
上一篇 下一篇

猜你喜欢

热点阅读