Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

307
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda