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

168
Vistas
¿Por qué no se imprime indefinido?
const person = { isHuman: false, name:"Jon", printIntroduction: function() { console.log(this.name); } }; const me = Object.create(person); me.name = 'Matthew'; me.isHuman = true; delete me.name me.printIntroduction();

salida: "Jon"

Cuando elimino la propiedad de nombre del objeto "yo", ¿por qué apunta a la propiedad de nombre del objeto persona?

por favor sugiera un buen material de referencia para entender esto.

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

0

Porque "persona" es el prototipo del "yo"-objeto. Si no se encuentra una propiedad en un objeto (debido a la eliminación), JS está buscando la cadena de prototipos para esa propiedad. Es por eso que obtienes a "Jon".

Referencia: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

about 4 years ago · Juan Pablo Isaza Denunciar

0

Object.create() crea un nuevo objeto utilizando un objeto existente como prototipo del nuevo objeto que crea.

Las propiedades del prototipo no se copian en el nuevo objeto creado por Object.create() . La herencia de prototipos funciona vinculando el nuevo objeto a su objeto prototipo.

Cuando se crea, me no tiene ninguna propiedad propia. Hereda las propiedades de person y esto es visible si ejecutas me.printIntroduction() inmediatamente después de const me = Object.create(person); .

Cuando se lee una propiedad (atributo o función) del nuevo objeto (p. ej console.log(me.name) ), el intérprete busca la propiedad ( name ) en el objeto ( me ). Si tal propiedad no existe, la busca en el prototipo (que es el objeto person en este caso). La búsqueda de la propiedad en el objeto prototipo funciona igual; si no se encuentra allí, se busca en el prototipo del objeto prototipo y así sucesivamente hasta que llega a la raíz de la cadena de prototipos.

Cuando se establece una propiedad en el objeto, la cadena de prototipos ya no se recorre. Se establece directamente en el objeto utilizado en la declaración. Lo mismo sucede cuando se elimina una propiedad.

Use Object.getOwnPropertyNames() para encontrar la lista de nombres de propiedad que son me y no heredados de la person :

 const person = { isHuman: false, name:"Jon", printIntroduction: function() { console.log(this.name); } }; const me = Object.create(person); me.printIntroduction(); console.log({ own_properties_after_creation: Object.getOwnPropertyNames(me)}); me.name = 'Matthew'; me.isHuman = true; me.printIntroduction(); console.log({ own_properties_after_set: Object.getOwnPropertyNames(me)}); delete me.name me.printIntroduction(); console.log({ own_properties_after_delete: Object.getOwnPropertyNames(me)});

Obtenga más información sobre la herencia de prototipos en JavaScript en la documentación de 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