He estado jugando con JS y estoy tratando de asignar una nueva variable dentro de un método de objeto, pero sigo sin definir en la consola.
Este es el objeto que creé:
const rodrigo = { firstName: 'Rodrigo', lastName: 'Pinto', job: 'Programmer', birthYEar: '1997', friends: ['Michael', 'Scott', 'Jim'], hasDriversLicense: true, calcAge: function () { this.age = 2021 - this.birthYEar; return this.age; //We don't actually need to return anything here actually, because we already said that age = calculation. }Pero cuando trato de iniciar sesión en rodrigo.age, devuelve indefinido. ¿Podría alguien guiarme a través de esto? No estoy entendiendo lo que estoy haciendo mal.
Su objeto inicialmente no tiene asignada una propiedad de age . Para poder acceder a la age , primero debe ejecutar la función calcAge a través rodrigo.calcAge() .
Si quieres que rodrigo.age devuelva algo, tendrás que definir esa propiedad. Pero dado que definió calcAge en su lugar y nunca llamó a ese método, no hay una propiedad age (todavía).
Una solución es reemplazar calcAge con una función getter llamada age . La ventaja es que puedes leer rogrigo.age e invocar implícitamente esa función:
const rodrigo = { firstName: 'Rodrigo', lastName: 'Pinto', job: 'Programmer', birthYear: '1997', friends: ['Michael', 'Scott', 'Jim'], hasDriversLicense: true, get age() { return new Date().getFullYear() - this.birthYear; } } console.log(rodrigo.age);Nota al margen: el cálculo de la edad es un poco más complejo que esto: necesita saber la fecha de nacimiento completa de alguien y compararla con el mes y la fecha actuales para ver si ya pasó.
const rodrigo = { firstName: 'Rodrigo', lastName: 'Pinto', job: 'Programmer', birthYEar: '1997', friends: ['Michael', 'Scott', 'Jim'], hasDriversLicense: true, calcAge: function () { this.age = 2021 - this.birthYEar; console.log(this.age); return this.age; } } rodrigo.calcAge();