Tengo esta siguiente clase...
class Person { constructor(name, age) { this.name = name; this.age = age; } getName() { return this.name; } getAge = () => this.age; }; Sé que cuando los métodos de clase u objeto se pasan a otros lugares, pierden this . Entonces, cuando asigno el método p1.getName a otra variable global printName , el valor de this printName interno no estará undefined y me dará un error debido a this.name . (Consulte el ejemplo a continuación) Esto sucede porque se cambia el contexto. ¿Es correcto mi entendimiento?
let p1 = new Person('John', 20); let printName = p1.getName; console.log(printName()); // Cannot read properties of undefined (reading 'name') Entonces, ¿qué pasa con el que tiene función de flecha? En la clase Person , getAge es un campo de clase que tiene una expresión de función de flecha. Cuando paso p1.getAge a otro lugar, this hace referencia al objeto correcto.
let printAge = p1.getAge; console.log(printAge()); // 20 Cuando paso el método p1.getAge a la variable global llamada printAge , el contexto cambia. ¿Tengo razón? También sé el hecho de que las funciones de flecha capturan this desde su ámbito léxico externo. Según tengo entendido, this no debería ser un objeto p1 .
Sé cómo enlazar métodos de objetos. Pero solo quiero saber por qué this función de flecha interior todavía se refiere al objeto correcto. ¿Qué me estoy perdiendo? ¿O mis entendimientos ya están equivocados?