JavaScript Object.getOwnPropertyDescriptors()

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

示例

let obj = {
  value: 11,
  get number() {
    return this.value;
  },
};

// get property descriptors for all the properties of obj let objectProperties = Object.getOwnPropertyDescriptors(obj);
console.log(objectProperties);

输出

{
  value: { value: 11, writable: true, enumerable: true, configurable: true },
  number: {
    get: [Function: get number],
    set: undefined,
    enumerable: true,
    configurable: true
  }
}

getOwnPropertyDescriptors() 语法

getOwnPropertyDescriptors() 方法的语法是

Object.getOwnPropertyDescriptors(obj)

这里,getOwnPropertyDescriptors() 是一个静态方法。因此,我们需要使用类名Object来访问该方法。


getOwnPropertyDescriptors() 参数

getOwnPropertyDescriptors() 方法接受

  • obj - 我们需要其属性描述符的对象。

getOwnPropertyDescriptors() 返回值

getOwnPropertyDescriptors() 方法返回一个包含给定对象所有属性描述符的对象。


示例 1:JavaScript Object.getOwnPropertyDescriptors()

let obj = {
  x: 10,
  get number() {
    return this.x;
  },
};

// get the property descriptors for all the properties of obj let value = Object.getOwnPropertyDescriptors(obj);
console.log(value);

输出

{
  x: { value: 10, writable: true, enumerable: true, configurable: true },
  number: {
    get: [Function: get number],
    set: undefined,
    enumerable: true,
    configurable: true
  }
}

在上面的示例中,obj 对象包含以下属性

  • x - 值为10的属性。
  • number() - 一个名为的方法,它返回x的值。

然后,我们使用 Object.getOwnPropertyDescriptors() 方法来获取 obj 的所有属性(即 xnumber())的描述符。


示例 2:getOwnPropertyDescriptors() 用于浅拷贝

let obj = {
  x: 10,
  get number() {
    return this.x;
  },
};

// use getOwnPropertyDescriptors() for shallow copy
let cloneObj = Object.create(
  Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
);
console.log(cloneObj); 

// Output: { x: 10, number: [Getter] }

在上面的示例中,我们可以看到 getOwnPropertyDescriptors() 方法与 create() 方法结合使用,可以帮助我们创建浅拷贝。

为了演示这一点,我们首先创建了一个名为 obj 的对象,它具有以下属性:

  • x - 值为10的属性。
  • number() - 一个返回x值的 getter 方法。

然后,我们使用 create()getPrototypeOf()getOwnPropertyDescriptors() 方法创建了 obj 的浅拷贝(称为 cloneObj)。

let cloneObj = Object.create(
  Object.getPrototypeOf(obj),
  Object.getOwnPropertyDescriptors(obj)
);

正如输出所示,cloneObjobj 的浅拷贝,因为这两个对象是相同的(它们指向相同的内存地址)。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战