赋值后this丢失是因为函数的this在调用时确定而非定义时;将方法赋值给变量仅复制引用,调用时变为普通函数调用,触发默认绑定规则。

把对象方法赋值给变量后,this 会丢失原本的绑定,指向全局对象(非严格模式)或 undefined(严格模式),而不是原对象。
为什么赋值后 this 会变?
JavaScript 中函数的 this 是在**调用时**决定的,不是定义时。把方法赋值给变量(比如 const fn = obj.method),只是复制了函数引用,没保存上下文。等你 later 调用 fn(),就变成普通函数调用,触发默认绑定规则。
常见表现和后果
- 原方法依赖
this.name或this.count,赋值后调用直接报错(严格模式)或读到undefined/ 全局属性 - 事件回调、定时器、异步回调里直接传入赋值后的函数,this 同样失效
- React 类组件中,如果没绑定
this就把方法传给子组件,点击时this是undefined
怎么解决?三种常用方式
-
箭头函数包装:写成
const fn = () => obj.method(),利用箭头函数不绑定 this 的特性,从外层继承 -
bind 显式绑定:赋值时就固定上下文,如
const fn = obj.method.bind(obj) -
调用时再绑定:不提前赋值,而是传参时用
obj.method.bind(obj)或() => obj.method()
ES6+ 更简洁的写法
类中可用箭头函数属性自动绑定:
class MyClass {<br> constructor() { this.value = 42; }<br> method = () => console.log(this.value);<br>}
这样无论怎么赋值或传递,this 始终指向实例。











