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

ES6中窗口加载与resize时执行方法的问题排查

问题分析与解决方案

嘿,我一眼就揪出问题啦——这是典型的**this指向绑定错误**导致的!

为啥checkSize没法正常执行?

当你直接把this.checkSize传给resize事件监听时,事件触发时this的指向会变成触发事件的对象(也就是window),而不是你的thisDiv类实例。这时候this.element就等同于window.element,自然找不到你要操作的DOM元素,方法也就跑不起来了。

几种靠谱的修复方案

方案1:用箭头函数保留this指向

箭头函数会自动继承外层作用域的this,直接在resize回调里用它调用checkSize就行:

events() {
  this.window.resize(() => this.checkSize());
}

方案2:用bind强制绑定this

通过bind方法把checkSize的this固定为类实例,确保回调执行时指向正确:

events() {
  this.window.resize(this.checkSize.bind(this));
}

方案3:在构造函数里提前绑定方法

如果你的类里有多个方法需要绑定this,可以在构造函数里一次性处理好,后续直接使用更省心:

class thisDiv { 
  constructor() { 
    this.element = $('.div'); 
    this.window = $(window); 
    // 提前把this绑定到类实例
    this.checkSize = this.checkSize.bind(this);
    this.checkSize(); 
    this.events(); 
  } 
  events() { 
    this.window.resize(this.checkSize); 
  } 
  checkSize() { 
    this.element.addClass('red'); 
  } 
} 
export default thisDiv;

验证小技巧

你可以在checkSize里加一行日志,看看触发事件时this的指向,就能确认问题是否解决:

checkSize() {
  console.log(this); // 正常应该输出thisDiv实例,而不是window
  this.element.addClass('red');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:24:12