Dado el código a continuación, aunque el nombre del parámetro está al principio, firstName, después de configurarlo con setter y observar las propiedades de un objeto, se convierte en _firstName. Vengo de un entorno de desarrollo de Java y esto no me parece lógico. ¿Alguien puede explicar, por favor?
class Person { constructor(firstName, DOB, sport) { this.firstName = firstName; this.DOB = DOB; this.sport = sport; } get firstName() { return this._firstName; } set firstName(firstName) { this._firstName = firstName; } } const person1 = new Person('Marko', '2002', 'tennis');` Objeto después de person1.firstName = 'Luka';
(Person {_firstName: 'Luka', DOB: '1256', _sport: 'tennis'} DOB: "1256" _firstName: "Luka" _sport: "tennis" DO: undefined firstName: (...) sport: (...) [[Prototype]]: Object) person1.firstName = 'Luka'; y esperaba que el campo del objeto permaneciera firstName pero se convirtió en _firstName (con subrayado). Veo que estoy haciendo este cambio en esta línea this._firstName = firstName; pero no entiendo cómo se puede anular el nombre de la variable
this.firstName es un método que establece la propiedad this._firstName .
Llamar al método setter this.firstName = "Marko" funciona de manera similar a llamar a un método estándar como this.firstName("Marko") . Como está usando el método en su constructor, "parece" que está configurando la propiedad this.firstName cuando en realidad está usando el método this.firstName para establecer la propiedad this._firstName .
Modificar el método this.firstName ayuda a entender esto:
class Person { constructor(firstName, DOB, sport) { this.firstName = firstName; this.DOB = DOB; this.sport = sport; } get firstName() { return this._firstName; } set firstName(firstName) { //this will output on the console whenever the method is being used console.log("setter method used"); this._firstName = firstName; } } const person1 = new Person('Marko', '2002', 'tennis'); Debería ver en la consola que el método setter se usó una vez. Ahora intente cambiar la primera línea de su constructor a this._firstName = firstName;