I am creating the class 'Person' and I need to add the data() method to the class prototype through the addMethod() function, but the variables this.name and this.age in the data() method are not accessing the class attributes, when returning it returns 'undefined, undefined years'
class Persona {
constructor(nombre, apellido, edad, domicilio) {
// Crea el constructor:
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
this.domicilio = domicilio;
}
detalle = () =>{
return {
Nombre : this.nombre,
Apellido : this.apellido,
Edad : this.edad,
Domicilio : this.domicilio
}
}
}
function crearInstanciaPersona(nombre, apellido, edad, dir) {
//Con esta función vamos a crear una nueva persona a partir de nuestro constructor de
//persona (creado en el ejercicio anterior)
//Recibirá los valores "Juan", "Perez", 22, "Saavedra 123" para sus respectivas
//propiedades
//Devolver la nueva persona creada
let person = new Persona(nombre, apellido, edad, dir);
return person
}
function agregarMetodo() {
//La función agrega un método "datos" a la clase Persona que toma el nombre y la edad
//de la persona y devuelve:
//Ej: "Juan, 22 años"
Persona.prototype.datos = () =>{
return `${this.nombre}, ${this.edad} años`
}
}
The problem is because you are using arrow (
arrow functions
) functions. This causes it tothis
be the context where the function was defined and not the class.To fix it, you just have to use normal functions.
Example: