let obj = { one: function(){ this.two(); }, two: function(){ console.log("two"); } } let oneFunc = obj.one; obj.one(); // two oneFunc(); // TypeError: this.two is not a function Llevo bastante tiempo programando en JavaScript. Pensé que tenía una comprensión muy sólida de this palabra clave. Sin embargo, me encontré con esto hoy y me voló la cabeza. No puedo entender por qué sucede esto. Cuando llamo a oneFunc() , this se refiere al objeto global. ¿Por qué pasó esto?
this refiere al objeto, y lo que está haciendo aquí es crear una función igual al método del objeto y así pierde la referencia al objeto.
Puedes usar enlazar
let obj = { one: function(){ this.two(); }, two: function(){ console.log("two"); } } let oneFunc = obj.one; oneFunc = oneFunc.bind(obj); obj.one(); // two oneFunc(); // TypeError: this.two is not a function