-
我把一个对象的方法直接当回调传给了 setTimeout 和事件监听,触发时报 Cannot read properties of undefined:一次 JavaScript this 指向丢失、把方法拆离对象就丢了绑定的深度复盘
我写了个 class 管理面板,把方法 handleClick 直接当回调传给按钮的 addEventListener,点击时控制台爆红:Cannot read properties of undefined (reading 'state')。同样的事发生在 setTimeout(panel.refresh, 1000) 上。这方法明明是 panel 的,this 怎么会是 …- 0
- 0
-
一个把对象方法直接作为回调传给 setTimeout 的写法,执行时 this 变成了 undefined、访问 this 的属性全报错:一次 JavaScript this 绑定丢失的深度复盘
把对象的方法 handleClick(里面用了 this.count)作为回调传给 setTimeout,执行时报 Cannot read properties of undefined——this 居然是 undefined。根因是 JS 的 this 不由'函数在哪定义'决定、而由'如何被调用'决定:setTimeout(obj.fn) 只是把函数本身取…- 0
- 0
-
我把对象的一个方法作为回调传给了 setTimeout,运行时它里面的 this 竟然变成了 undefined,直接报错,我对着 JavaScript 的 this 取决于怎么调用而非在哪定义这个坑排查大半天的复盘
一个让无数从其他语言转来的人对 JavaScript 又恨又怕的经典坑——this。折磨在同一个方法在对象上直接调用一切正常,一旦传出去作回调 this 就神秘变了。有个对象 timer 封装了 seconds 和 tick 方法(tick 里用 this.seconds++)。直接 timer.tick() 正常,但 setTimeout(timer.tick, 1000) 一秒后报错 Cann…- 3
- 0
-
我把对象的方法当回调传给了 setTimeout,结果一执行就报 this 是 undefined、方法里的属性全访问不到,我对着这个丢了 this 的方法排查了大半天的复盘
我的方法在 obj 上直接调用一切正常,可一把它当回调传给 setTimeout(或事件监听、forEach),回调一执行就报 Cannot read properties of undefined——打印 this 竟是 undefined,方法里 this.xxx 全访问不到。同一个方法,直接调好好的,怎么一传出去 this 就丢了?深挖才懂:JavaScript 的 this 不是定义时绑定…- 0
- 0
-
同一个方法自己调好好的、一传给 setTimeout 或事件监听当回调就报 this 是 undefined:JavaScript this 绑定丢失的避坑复盘
这是一个让我对 JavaScript 的 this 彻底改观的 bug,也是几乎每个 JS 开发者都会踩一次的成人礼。事情是这样的:我写了一个类里面有个方法 handleClick,方法里要用到这个类实例的一些数据比如 this.state。开发时我直接调用 instance.handleClick 一切正常,可当我把这个方法作为回调函数传出去,比如绑给一个按钮的点击事件或者塞进一个 setTim…- 0
- 0
-
方法当回调 this 就丢:JS this 指向避坑复盘
有个 JavaScript 的类里有个方法,逻辑是处理点击事件然后更新自己的一个属性:class Counter { count = 0; handleClick() { this.count++ } },然后我把这方法当回调绑到按钮上 button.addEventListener(click, counter.handleClick)。本地一测点击按钮啪一声控制台红字:Cannot read …- 0
- 0
bind
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!






