¿Método para referirse a uno mismo (objeto)?

Quiero conseguir que cuando, en la función autoejectuable, escriba NATALIA, salga"los padres de NATALIA…" y no se como lograr la fórmula o el método para conseguir mostrar la ${a} para que muestre el nombre que ingresas en la funcion para saber los padres

const NATALIA = {
  padre: "Juan",
  madre: "Paloma",
  hermano: "Jose Miguel"
};
const EMILIO = {
  padre: "Mariano",
  madre: "Desconocida",
};
const ALEX = {
  padre: "Andres",
  madre: "Isabel",
  hermano: "Pablo"
};
try{
((a)=>
  console.log(`2: Los padres de ${a} se llaman: ${a.madre} y ${a.padre}.`)
)(NATALIA);
console.log(a);
}
catch(err){
  if(err === ReferenceError){
    console.log(`Perdone las molestias. Ha habido un error de tipo ${err.name}`);
  } else {
    console.log(`Error de tipo ${err.name}. ¡Intentaremos solucionarlo!`)
  }
}
finally {
console.log("Acceso al try...catch");  
};

sin try…catch:

const NATALIA = {
  padre: "Juan",
  madre: "Paloma",
  hermano: "Jose Miguel"
};
const EMILIO = {
  padre: "Mariano",
  madre: "Desconocida",
};
const ALEX = {
  padre: "Andres",
  madre: "Isabel",
  hermano: "Pablo"
};

((a)=>
  console.log(`2: Los padres de ${a} se llaman: ${a.madre} y ${a.padre}.`)
)(NATALIA);
console.log(a);

Why do you want to use an IIFE here? What does it gain you?

In any case, you’re throwing an error because of console.log(a); - the variable a only has scope inside the IIFE.

2 Likes

Hola @kevinSmith !
Ay! Perdón! El console.log(a) no quería ponerlo. Eso se me ha colado.
Una pregunta, que es IIFE?
Lo que quiero con la función autoejecutable es poder mostrar el mensaje por console.log, que diga:
La persona (a) tiene el padre x y la madre x

Entonces, quiero que se muestre el contenido de (a) cuando se autoejecuta. Por ejemplo, autoejecuto la función con el nombre de “Natalia” y quiero que en el console.log se vea:

La persona Natalia tiene el padre x y la madre x

Es solo para practicar. Como todo lo que pregunto en el foro…XD
Gracias

Hola!

Hmm, obtener el nombre con el que se instancia un objeto es complicado y puede variar mucho. No es un método confiable para hacer lo que quieres.

No obstante, podrías obtener todas las Object.keys del objeto global e iterar las keys, comparandolas con el objeto que recibe la función hasta encontrar la que sea idéntica a la que se pasó al objeto.

Creo que la mejor forma es añadir un atributo nombre. También podrías definir un objeto personas y dentro de este añadir cada una de las propiedades:

const personas = { NATALIA, EMILIO, ALEX }

y pasarle el nombre de la propiedad a la función:

((personas, a) => console.log(`2: Los padres de ${a} se llaman: ${personas[a].madre} y ${personas[a].padre}.`)
)(personas, 'NATALIA');

Por cierto, IIFE es una función autoejecutable.