了解所有关于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)
但这将工作,并正确地复制到setter上。
const person3 = {}
Object.defineProperties(person3,
Object.getOwnPropertyDescriptors(person1))
正如你可以通过控制台测试看到的。
person1.name = 'x'
"x"
person2.name = 'x'
person3.name = 'x'
"x"
person2 错过了设置器,它没有被复制过来。
同样的限制也适用于浅层克隆对象,用 Object.create().