JavaScript类变量在forEach循环中为undefined如何解决
问题原因
Class 语法默认运行在严格模式下。forEach 接收普通函数作为回调时,该函数存在独立的 this 绑定,不会继承外层类方法的 this 指向(即类实例本身);严格模式下未显式绑定的 this 值为 undefined,因此回调内访问 this.myVar 无法拿到预期结果。
方法外层、普通for循环不会产生新的函数级this绑定,因此这两个位置访问this.myVar可以正常运行。
可用解决方案
- 改用箭头函数作为回调
箭头函数本身没有独立的this绑定,会直接捕获外层作用域的this(即类实例),是最简洁的推荐写法:itemList.forEach((element) => { console.log(this.myVar); // 正常获取实例属性值 }); - 传入
forEach的第二个参数指定this绑定forEach原生支持第二个入参,该参数会被作为回调函数运行时的this值,直接传入外层的this即可:itemList.forEach(function(element){ console.log(this.myVar); // 正常获取实例属性值 }, this); - 外层缓存this引用
在进入forEach逻辑前,先把外层正确的this引用存到变量中,回调内部直接访问该缓存变量:iterate(itemList){ const _this = this; // 缓存类实例的this引用 // 其余逻辑省略 itemList.forEach(function(element){ console.log(_this.myVar); // 正常获取实例属性值 }); }
内容的提问来源于stack exchange,提问作者Arcyno
相关产品推荐
相关产品推荐

