Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

298
Vistas
Diferencia entre __proto__ y [[ Prototipo ]] en javascript

He leído e intentado entender otras respuestas similares a esta pregunta también ( como esta ), pero aún así el concepto de herencia prototípica no me queda muy claro. y en este momento lo que más me confunde es cuál es la diferencia real entre __proto__ y [[ Prototype ]] ? Por lo que he podido entender, es que [[ Prototype ]] es un " enlace interno que une un objeto con otro ". Pero se vuelve ambiguo cuando veo un tutorial en YouTube, porque cada vez que crean un objeto y si intentan registrarlo usando console.log en la consola de su navegador, en realidad tiene la propiedad __proto__ , pero cuando trato de hacer lo mismo genera [[ Prototype ]] en su lugar. entonces me gustaria saber por que es asi? y ¿qué es un " enlace interno "? ¡Gracias por adelantado! :) A continuación se muestra el código que genera "[[ Prototipo ]]" en Chrome y "<prototipo>" en Firefox.

 function User(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } const user = new User("Someone", "Something"); console.log(user);

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

La notación de doble corchete proviene de la especificación ECMAScript donde siempre se refiere a una entidad interna (campo, atributo, espacio,...) pero no es una notación que pueda usar en código JavaScript. Es información para el implementador del lenguaje y ayuda a definir con precisión el comportamiento del lenguaje.

En una consola puede ver información representada con estos corchetes dobles, como es el caso de la consola de Chrome. Firefox usa una notación diferente: <prototype> .

Ahora al núcleo de su pregunta. El vínculo entre un objeto y su objeto prototipo no es una propiedad de JavaScript propia de ese objeto. Es una ranura interna :

Las ranuras internas corresponden al estado interno asociado con objetos y utilizado por varios algoritmos de especificación ECMAScript. Las ranuras internas no son propiedades de objeto y no se heredan.

Puede obtener el objeto prototipo a través .__proto__ , pero esa propiedad __proto__ es un getter en el objeto Object.prototype . Eso es como correr en círculos: cuando escribes obj.__proto__ , el motor necesita saber cuál es la cadena del prototipo antes de que pueda encontrar ese valor de __proto__ para ti, ya que necesita obtenerlo por herencia, no es una propiedad del propio obj . Y para encontrar el enlace de herencia, el motor usará la "ranura" interna [[Prototype]] .

about 4 years ago · Juan Pablo Isaza Denunciar

0

El prototipo de cada objeto se guarda en la ranura interna denominada [[prototype]] y __proto__ es solo un getter/setter, definido en el objeto Object.prototype , para obtener el valor de la ranura interna [[prototype]] de cualquier objeto.

Ejemplo:

 const arr = [];

Cada instancia de una matriz obtiene Array.prototype como su prototipo. Entonces, en la declaración anterior de arr , [[prototype]] ranura interna contiene una referencia a Array.prototype y en la siguiente expresión:

 arr.__proto__ === Array.prototype // true

arr.__proto__ obtiene el objeto Array.prototype de la ranura interna [[prototype]] .

Como se mencionó anteriormente, __proto__ es solo un getter/setter que obtiene el valor de la ranura interna [[prototype]] y solo está allí por razones de compatibilidad. No debe usarse en el código javascript moderno; Se deben usar los siguientes dos métodos para establecer/obtener el prototipo de cualquier objeto:

  • Objeto.setPrototypeOf()

  • Objeto.getPrototypeOf()


Hay otras ranuras internas, aparte de [[prototype]] , mencionadas en la especificación Ecmascript y estas ranuras internas no son accesibles por el código javascript que escribimos.

Si necesita saber más sobre las ranuras internas, lea:

¿Qué es una "ranura interna" de un objeto en JavaScript?

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda