Skip to content
On this page

使用工厂函数生成对象

function user(name){
    return {
        name,
        show(){
            console.log(this.name)
        }
    }
}
let u1=user('张三')
u1.show()//张三
let u2=user('李四')
u2.show()//李四

对象属性特征

查看属性特征

Object.getOwnPropertyDescriptor(obj,key)查看对象某个属性特征,Object.getOwnPropertyDescriptors(obj)查看对象所有属性特征

let obj={
    name:'张三',
    age:19
}
console.log(Object.getOwnPropertyDescriptor(obj,'age'))
// {
//     configurable: true,是否可配置
//     enumerable: true,属性是否可枚举(能否被for in ,keys()遍历)
//     value: 19,属性值
//     writable: true,是否可修改属性值
// }

属性特征描述符

描述符说明默认值
value对象属性值undefined
writable对象属性是否可修改,是可写的额还是只读的true
enumerable对象属性是否可枚举(能通过for in循环,或者Object.keys()读取)true
configurable属性属性能否使用delete删除,能否修改属性特征,或能否修改访问器属性true

修改属性特征

// 修改单个属性特征
Object.defineProperty(obj,'sex',{
    writable:true,
    enumerable:false,
    value:'',
    configurable:false
})

// 修改多个属性特征
Object.defineProperties(obj,{
    name:{
        writable:false,
        enumerable:true,
        value:'李四',
        configurable:true
    },
    age:{
        writable:false,
        enumerable:false,
        value:'30',
        configurable:false
    }
})

需要注意的是,如果原来的属性值不存在,就相当于新增属性了

Released under the MIT License.