¿Por qué la consola se imprime indefinida cuando accedo directamente a la propiedad de edad? Primero tengo que imprimir la función calcAge para obtener el valor.
const Osama = { firstName: 'osama', lastName: 'Shaikh', birthyear: 1999, job: 'developer', friends: ['michael', 'peter', 'steven'], haslicense: true, calcAge: function () { this.age = 2021 - this.birthyear; return this.age; }, }; console.log(Osama.age);Para empezar, ese objeto no tiene una propiedad de age .
Solo lo asigna cuando ejecuta el método calcAge .
Parece que está buscando asignar un getter para la propiedad de age .
const Osama = { birthyear: 1999, get age() { console.log('in getter'); return 2021 - this.birthyear; }, }; console.log(Osama.age); // in getter, 22 console.log(Osama.age); // in getter, 22O bien, para calcular la edad solo en el primer acceso y reemplazarla con una propiedad estática, puede usar un captador de sobrescritura automática .
const Osama = { birthyear: 1999, get age() { console.log('in getter'); delete this.age; return (this.age = 2021 - this.birthyear); }, }; console.log(Osama.age); // in getter, 22 console.log(Osama.age); // 22