You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取对象继承属性的属性描述符?

获取对象属性描述符的方法

1. 获取自身属性(own property)的描述符

直接用Object.getOwnPropertyDescriptor()方法就行,它只返回对象自身拥有的属性的描述符,不会处理继承来的属性。

举个实际例子:

const user = { username: 'john_doe' };
const desc = Object.getOwnPropertyDescriptor(user, 'username');
console.log(desc);
// 输出:{ value: 'john_doe', writable: true, enumerable: true, configurable: true }

如果目标属性不是对象的自身属性,这个方法会返回undefined。

2. 获取继承属性的描述符

继承的属性不属于当前对象的自身属性,得顺着原型链往上找,直到找到包含该属性的父对象,再获取它的自身属性描述符。

可以写个简单工具函数实现这个逻辑:

function getInheritedDescriptor(obj, propName) {
  let current = obj;
  // 顺着原型链遍历,直到找到属性或原型链到头
  while (current !== null) {
    const desc = Object.getOwnPropertyDescriptor(current, propName);
    if (desc) {
      return desc;
    }
    current = Object.getPrototypeOf(current);
  }
  // 整个原型链都找不到就返回undefined
  return undefined;
}

// 测试示例
const parent = { gender: 'male' };
const child = Object.create(parent); // child继承parent的属性
const genderDesc = getInheritedDescriptor(child, 'gender');
console.log(genderDesc);
// 输出:{ value: 'male', writable: true, enumerable: true, configurable: true }

要注意:继承属性的行为由原型链上对应属性的描述符决定,当前对象本身并没有这个属性的专属描述符。

内容的提问来源于stack exchange,提问作者ceving

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:02:12