Mi entendimiento sobre el concepto: los objetos vienen con una propiedad oculta llamada __proto__
que proporciona una referencia a la propiedad prototipo del objeto de función. Cuando creo un objeto vacío y lo registro en la consola, veo que la propiedad dentro del objeto es [[Prototype]]
en lugar de __proto__
. ¿Puede proporcionar alguna idea o corrección a mi comprensión sobre el concepto?
[[Prototype]]
se refiere a una ranura interna de objetos: valores que se mantienen en el motor JS, pero que no están expuestos directamente al JavaScript en ejecución. Consulte aquí los detalles de la especificación.
El valor contenido en una ranura interna a menudo se puede recuperar si existen métodos que lo expongan deliberadamente.
Para otro ejemplo de una ranura interna, considere los valores de un Conjunto:
const set = new Set(); set.add('someValue');
someValue
no es directamente visible en el Conjunto, pero se puede acceder a él a través de métodos que ejecutan código nativo, y ese código nativo accede a las ranuras internas del Conjunto para ver lo que contiene, por ejemplo, con Set.prototype.has
.
En el caso de [[Prototype]]
, el valor en esa ranura interna se puede recuperar invocando el captador __proto__
, que hace lo siguiente:
- Devolver ?
O.[[GetPrototypeOf]]()
.
eventualmente accediendo y regresando a la ranura interna [[Prototype]]
.
Además, __proto__
está en desuso; debería preferir usar Object.getPrototypeOf
y Object.setPrototypeOf
.