¿Cuál es la diferencia entre "__proto__" y "prototipo"?


Respuesta 1:

no

  • __proto__ es el prototipo real, pero no lo use ... se suponía que el constructor.prototipo debía hacer lo mismo que __proto__ pero está roto en su mayoría. El prototipo de una función es en realidad el prototipo de las cosas hechas por él, no su prototipo.

prototipo

.__ proto__

__proto__

__proto__

es en realidad

nuevo

.prototipo

Function.prototype

__proto__

.constructor.prototipo

.constructor

Object.isPrototypeOf

Object.getPrototypeOf


Respuesta 2:

Se dice que la programación de objetos en JavaScript está "basada en prototipos"

Para definir una API heredada, cree un objeto prototipo con métodos y, potencialmente, algunos valores predeterminados de propiedades.

Todas las instancias `Function` (las funciones son objetos en JavaScript) tienen una propiedad` prototype` vacía predeterminada que se puede extender o reemplazar. Si se llama a esta función como un constructor con el operador `new`, esta propiedad` prototype` se convertirá en la propiedad interna `[Prototype]` de las instancias, desde donde se buscarán sus API heredadas

Este prototipo también se puede definir como un nuevo objeto simple e inyectado manualmente:

  • en un objeto existente a través de Object.setPrototypeOf (), utilizado sin la función de constructor a través de Object.create (), anula la propiedad del prototipo de la función predeterminada a través de afectación literal, Object.assign () u Object.defineProperty ()

Durante mucho tiempo, el [Prototipo] interno de un objeto no fue oficialmente accesible para su inspección o modificación. Una forma de hacerlo era inspeccionar la propiedad heredada del `constructor` del objeto, pero podría haberse anulado fácilmente.

Mozilla luego presentó el ayudante no oficial __proto__.

Luego TC39 (el grupo de trabajo ECMAScript) definió la API oficial setPrototypeOf () / getPrototypeOf ().

Luego, nuevamente TC39, validó la API __proto__