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教程: