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 重新定義。