1. 程式人生 > 實用技巧 >javascript中的描述物件(Descriptor)

javascript中的描述物件(Descriptor)

物件的每個屬性都有一個描述物件(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"

原文連結:https://www.cnblogs.com/lsAxy/p/12818972.html