为什么 Object.getOwnPropertyDescriptor({}, '__proto__')

Why does Object.getOwnPropertyDescriptor({}, '__proto__') return undefined?

本文关键字:proto getOwnPropertyDescriptor Object 为什么      更新时间:2023-09-26

为什么Object.getOwnPropertyDescriptor({}, '__proto__')返回undefined

是因为__proto__最初实际上不是用户财产吗?

>__proto__不是自己的财产。它是 Object.prototype 的一个属性,它是一个内部实现的 getter 或 setter,用于获取和设置对象的原型 ([[Prototype]])。

< Object.getOwnPropertyDescriptor(Object.prototype, '__proto__')
> Object {enumerable: false, configurable: true, get: function..., set: function...}

__proto__ 是从对象的prototype继承的属性:

Object.getOwnPropertyNames({}) // prints "[]", no properties
'__proto__' in {}              // prints "true", it's inherited from prototype

您可以直接从prototype获取__proto__描述符:

Object.getOwnPropertyDescriptor(Object.getPrototypeOf({}), '__proto__');
// prints {enumerable: false, ... }