如何获取对象继承属性的属性描述符?
获取对象属性描述符的方法
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
相关产品推荐
相关产品推荐

