Object.getOwnPropertyDescriptors()

**Object.getOwnPropertyDescriptors()** 静态方法返回给定对象的所有自有属性描述符。

试试看

语法

js
Object.getOwnPropertyDescriptors(obj)

参数

obj

要获取所有自有属性描述符的对象。

返回值

包含对象所有自有属性描述符的对象。如果没有属性,则可能为空对象。

描述

此方法允许检查对象的全部自有属性的精确描述。JavaScript 中的属性由字符串值名称或Symbol 和属性描述符组成。有关属性描述符类型及其属性的更多信息,请参阅 Object.defineProperty()

属性描述符是一个记录,具有以下某些属性

与属性关联的值(仅限数据描述符)。

可写

如果且仅当与属性关联的值可以更改时为true(仅限数据描述符)。

获取

用作属性获取器的函数,或者如果不存在获取器,则为undefined(仅限访问器描述符)。

设置

用作属性设置器的函数,或者如果不存在设置器,则为undefined(仅限访问器描述符)。

可配置

如果且仅当此属性描述符的类型可以更改以及属性可以从对应对象中删除时为true

可枚举

如果且仅当此属性在枚举对应对象上的属性时出现时为true

示例

创建浅拷贝

虽然Object.assign() 方法只会将源对象中的可枚举且自有属性复制到目标对象,但您可以使用此方法和Object.create() 对两个未知对象进行浅拷贝

js
Object.create(
  Object.getPrototypeOf(obj),
  Object.getOwnPropertyDescriptors(obj),
);

创建子类

创建子类的一种典型方法是定义子类,将其原型设置为超类的实例,然后在该实例上定义属性。对于获取器和设置器,这可能会很麻烦。相反,您可以使用此代码设置原型

js
function superclass() {}
superclass.prototype = {
  // Define the superclass constructor, methods, and properties here
};
function subclass() {}
subclass.prototype = Object.create(superclass.prototype, {
  // Define the subclass constructor, methods, and properties here
});

规范

规范
ECMAScript 语言规范
# sec-object.getownpropertydescriptors

浏览器兼容性

BCD 表格仅在浏览器中加载

参见