跳到主要内容

JavaScript 对象的 Object.getOwnPropertyDescriptor() 方法详解

Object.getOwnPropertyDescriptor()方法返回对象的特定属性的属性描述符。

示例

let obj = { num: 10 };

// 获取obj的num属性的属性描述
let numValue = Object.getOwnPropertyDescriptor(obj, "num");

console.log(numValue);

// 输出: { value: 10, writable: true, enumerable: true, configurable: true }

getOwnPropertyDescriptor()语法

getOwnPropertyDescriptor()方法的语法是:

Object.getOwnPropertyDescriptor(obj, prop);

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

getOwnPropertyDescriptor()参数

getOwnPropertyDescriptor()方法接受:

  • obj - 要查找属性的对象。
  • prop - 要检索其描述的属性的名称或Symbol

getOwnPropertyDescriptor()返回值

getOwnPropertyDescriptor()方法返回:

  • 对象指定属性的属性描述符。
  • 如果对象中不存在该属性,则返回undefined

示例1:JavaScript对象Object.getOwnPropertyDescriptor()

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

// 获取obj中x的属性描述
let xDescriptors = Object.getOwnPropertyDescriptor(obj, "x");

console.log(xDescriptors);

// 获取number()方法的属性描述
let value = Object.getOwnPropertyDescriptor(obj, "number");

console.log(value);

输出

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

在这个程序中,我们创建了一个包含以下属性的对象obj:

  • x - 值为711的属性
  • number() - 返回x值的get方法

然后,我们使用getOwnPropertyDescriptor()方法查找x和number()的属性描述符:

// 查找x的属性描述
let xDescriptors = Object.getOwnPropertyDescriptor(obj, "x");

// 查找number()方法的属性描述
let value = Object.getOwnPropertyDescriptor(obj, "number");

注意传递给getOwnPropertyDescriptor()方法的参数。对象名obj没有使用引号。

然而,属性名x和number使用双引号括起来,即"x""number"

示例2:使用defineProperty()的getOwnPropertyDescriptor()

let obj = {};

// 使用defineProperty()方法定义obj的属性
Object.defineProperty(obj, "id", {
value: 123,
writable: false,
enumerable: false,
});

// 查找创建的属性'id'的属性描述
console.log(Object.getOwnPropertyDescriptor(obj, "id"));

输出

{ value: 123, writable: false, enumerable: false, configurable: false }

在上述示例中,我们初始化了一个空对象obj。然后,我们使用defineProperty()方法在其上定义了单个属性id。

最后,我们使用getOwnPropertyDescriptor()打印了id属性的所有属性描述。

结果输出表明,getOwnPropertyDescriptor()返回了我们使用defineProperty()定义的相同属性描述符。

推荐阅读: