Object getOwnPropertyDescriptors()方法

查找有關Object對象的JavaScript getOwnPropertyDescriptors()方法的全部信息

此方法返回對象的所有自己的(非繼承)屬性描述符。

Object.getOwnPropertyDescriptors(obj)接受一個對象,並返回一個提供描述符列表的新對象。

例子:

const dog = {}
Object.defineProperties(dog, {
  breed: {
    value: 'Siberian Husky'
  }
})
Object.getOwnPropertyDescriptors(dog)
/*
{
  breed: {
    value: 'Siberian Husky',
    writable: false,
    enumerable: false,
    configurable: false
  }
}
*/

有一個用例使此屬性非常有用。 ES2015給了我們Object.assign(),它從一個或多個對象複製所有可枚舉的自身屬性,並返回一個新對象。但是,這有一個問題,因為它不能正確複製具有非默認屬性的屬性。

例如,如果某個對像只有一個setter,則無法使用Object.assign()。例如與此對象:

const person1 = {
  set name(newName) {
    console.log(newName)
  }
}

此復制嘗試將無效:

const person2 = {}
Object.assign(person2, person1)

但這可以正常工作並正確複製到設置器上:

const person3 = {}
Object.defineProperties(person3,
  Object.getOwnPropertyDescriptors(person1))

您可以通過控制台測試看到:

person1.name = 'x'
"x"

person2.name = ‘x’

person3.name = ‘x’ “x”

person2錯過了二傳手,它沒有被複製。

同樣的限制也適用於具有以下特徵的淺層克隆對象:Object.create()

免費下載我的JavaScript初學者手冊


更多js教程: