Object.create 对整个对象的多个属性值进行配置
创建对象 不可更改属性值
let obj = Object. create ( { } ,
{ name: { value: 'lisi' , writable: false , } , age: { value: 20 , writable: true , }
} ) console . log ( '初始化obj' , obj)
obj. name = 'wangwu'
console . log ( '更新不可变属性name' , obj)
obj. age = 30
console . log ( '更新可变属性age' , obj) ;
创建对象 不可枚举属性
let obj2 = Object. create ( { } ,
{ name: { value: 'lisi' , enumerable: false , } , age: { value: 20 , enumerable: true , }
} )
for ( const key in obj2) { console . log ( '不可枚举属性' , key)
}
创建对象 属性拦截器
let name = 'zhangsan'
let obj3 = Object. create ( { } , { name: { get ( ) { return name} , set ( value) { if ( value === 'wangwu' ) { console . log ( '非法操作' ) return } name = value} } }
) console . log ( '初始化obj3' , obj3)
obj3. name = 'wangwu'
Object.defineProperty 对一个对象的单个属性进行配置
let obj = { name: 'zhangsan' }
Object. defineProperty ( obj, 'name' , { value: 'lisi' , writable: false , enumerable: false , configurable: false
} )
console . log ( 'obj' , obj)
let obj2 = { name: 'wangwu' }
Object. defineProperty ( obj2, 'name' , { get ( ) { return 'lisi' } , set ( value) { console . log ( '非法操作' ) }
} )
console . log ( 'obj2' , obj2) `
总结
对象配置方法
Object. create ( 原型, 配置) => 对象 :用于基于指定原型和配置创建对象,可进行整个对象的多个配置 。
Object. defineProperty ( 对象, 属性名, 配置) :用于为一个对象的单个属性进行配置。Object. defineProperties ( obj, props)
配置项说明
值相关 value:属性的默认值。 writable:表示属性值是否可写。 访问器: setter(存储器 ):用于设置属性 value 。 getter(获取器 ):用于获取属性 value 。 属性相关 enumerable:决定属性是否能被 API 或者语法获取(即是否为开放属性)。 configurable:决定属性是否可以被删除,以及是否能再次使用 defineProperty 重新定义。