javascript中的描述物件(Descriptor)
阿新 • • 發佈:2020-10-16
物件的每個屬性都有一個描述物件(Descriptor),用來控制該屬性的行為。Object.getOwnPropertyDescriptor方法可以獲取該屬性的描述物件。
獲取物件中屬性描述物件
Object.getOwnPropertyDescriptor(obj, propName)
引數:第一個引數是目標物件,第二個引數是目標物件的目標屬性。
返回值:該屬性描述物件
如:
const obj = { item: 'hello', msg:'hi' } Object.getOwnPropertyDescriptor(obj, 'item') { value: 'hello', writable: true, enumerable: true, configurable: true }
如:value表示值,enumerable表示是否可列舉
比如物件的通用方法toString(),陣列的length屬性,其描述物件的enumerable屬性的都是false。
這就解決了我一個之前的一個疑問。遍歷物件中的屬性怎麼不會迴圈出物件內建的屬性方法。
獲取物件中全部屬性的屬性描述物件
Object.getOwnPropertyDescriptors(obj)
引數:想要獲取的物件
返回值: 描述物件集合
屬性描述物件的定義
Object.defineProperty(obj, propName, descriptorObj)
引數:第一個引數目標物件,第二個引數是屬性名,第三個引數是屬性描述物件。
返回值: 修改後的物件
如:
const obj = Object.defineProperty({}, 'item', {
item: 'hello',
writable: true,
enumerable: true,
configurable: true
});
// 當然,這樣定義只是為了定義描述物件。
// 直接
obj.item = hello // 最終也和上面一樣
obj.item // "hello"