object.getownpropertydescriptor用于获取对象自有属性的完整描述符,返回包含value/writable或get/set等特性的对象;它不查找原型链属性,常配合object.defineproperty复刻或修改属性特性。

Object.getOwnPropertyDescriptor 用于获取对象自身某个属性的**完整描述符(descriptor)**,它返回一个包含该属性所有特性(如 value、writable、enumerable、configurable 等)的对象。注意:它只查**自有属性**,不查原型链上的属性。
基础用法:获取数据属性描述符
最常见的是获取普通数据属性的描述符:
- 语法:
Object.getOwnPropertyDescriptor(obj, prop) - 第一个参数是目标对象,第二个是属性名(字符串)
- 如果属性不存在或为继承属性,返回
undefined
例如:
const obj = { name: 'Alice' };
console.log(Object.getOwnPropertyDescriptor(obj, 'name'));
// 输出:{ value: 'Alice', writable: true, enumerable: true, configurable: true }
区分数据属性和访问器属性
描述符有两种类型:数据描述符(含 value 和 writable)和访问器描述符(含 get、set)。两者不能混用。
- 数据属性描述符一定有
value或writable - 访问器属性描述符一定有
get或set(至少一个) - 若属性是 getter/setter,返回的描述符中不含
value和writable,而是get、set、enumerable、configurable
示例:
const obj = {
_age: 25,
get age() { return this._age; },
set age(val) { this._age = val; }
};
console.log(Object.getOwnPropertyDescriptor(obj, 'age'));
// 输出:{ get: [Function: get age], set: [Function: set age], enumerable: true, configurable: true }
注意:只返回自有属性,不查找原型链
即使属性在原型上存在,getOwnPropertyDescriptor 也不会返回它:
-
obj.toString是继承自Object.prototype的,调用Object.getOwnPropertyDescriptor(obj, 'toString')返回undefined - 想查原型链上的属性,需手动遍历原型(比如用
Object.getPrototypeOf()配合循环) - 若需要“是否可枚举”等信息但不确定来源,可先用
hasOwnProperty判断是否为自有属性
配合 Object.defineProperty 使用
获取到描述符后,常用于复制属性定义、冻结属性逻辑或调试:
- 可将获取的描述符直接传给
Object.defineProperty来复刻属性行为 - 修改描述符后再定义,能精确控制
writable、configurable等特性 - 注意:某些特性(如将
configurable: false改为true)是不可逆的,会报错
例如锁定属性值:
const obj = { count: 0 };
const desc = Object.getOwnPropertyDescriptor(obj, 'count');
Object.defineProperty(obj, 'count', { ...desc, writable: false });
obj.count = 99; // 无效(严格模式下会报错)
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











