You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript类中setInterval传函数与lambda表达式的差异问题

报错根本原因

问题核心是JavaScript普通函数的this指向是动态绑定的:

  • 直接把this.Move作为参数传入setInterval时,你传递的只是Move函数本身的引用,该函数和当前子弹类实例的绑定关系会被切断。
  • setInterval执行回调时,默认会把回调的this指向浏览器全局对象window,严格模式下则为undefined。你的Move方法中用到了读取实例style属性的逻辑,此时this不是目标类实例,自然无法读取到style属性,触发类型错误。

两种写法的本质差异

  • 第一种写法setInterval(this.Move, 0):仅传递了Move方法的裸引用,定时器执行该方法时没有绑定类实例上下文,this指向不符合预期,无法访问实例属性。
  • 第二种箭头函数包裹的写法:箭头函数自身不存在独立的this,它的this完全继承自定义位置的外层作用域的this。该箭头函数定义在类构造函数中,外层this就是当前的子弹类实例,所以调用this.Move()时this始终指向正确的实例,不会出现指向丢失的问题。

你也可以用bind手动绑定上下文实现相同效果:

setInterval(this.Move.bind(this), 0)

内容的提问来源于stack exchange,提问作者shayan bajelan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:45:03