规范this使用的核心是统一认知、明确边界和工具兜底;强制显式绑定场景包括对象方法赋值调用、定时器/事件回调中使用实例方法、数组高阶函数中直接传入this方法;禁止在对象字面量方法、构造函数、需动态this的工具函数中使用箭头函数;类中主推字段箭头函数,辅以构造器bind或内联箭头;通过ESLint(no-invalid-this等)和TypeScript类型标注固化规范。

团队代码中规范 this 使用,核心不是禁止或滥用某种写法,而是让每个开发者能快速判断 this 指向、避免隐式丢失、减少调试成本。关键在统一认知 + 明确边界 + 工具兜底。
明确哪些场景必须显式绑定 this
以下情况不加约束极易出错,团队应强制要求显式处理:
- 对象方法被赋值后调用:如
const handler = obj.handleClick; btn.onclick = handler;→ 必须用bind、箭头函数字段(handleClick = () => { ... })或内联箭头包装 - 定时器/事件回调中使用实例方法:如
setTimeout(obj.update, 100)→ 改为setTimeout(() => obj.update(), 100)或setTimeout(obj.update.bind(obj), 100) - 数组高阶函数中访问实例属性:如
list.map(item => this.process(item))→ 允许;但若写成list.map(this.process)就必须提前bind或改用箭头函数字段
限制箭头函数的使用范围
箭头函数不是万能解药,团队应禁止在以下位置使用:
- 对象字面量中的方法:如
{ getName: () => this.name }→ this 不会指向该对象,应改用普通函数 - 需要
new实例化的构造逻辑:箭头函数无法被new调用,直接报错,构造器必须用function或class - 需要动态
this的通用工具函数:如封装一个可复用的debounce,内部需正确转发this,不能用箭头函数实现主体逻辑
类中统一 this 绑定策略
ES6 class 默认不自动绑定方法,团队应选定一种主推方式并保持一致:
立即学习“Java免费学习笔记(深入)”;
- 推荐字段箭头函数(
handleClick = () => { ... }):语义清晰、无需手动 bind、支持继承,适合 React 组件、事件处理器等高频回调场景 - 构造器中 bind(
this.handleClick = this.handleClick.bind(this)):兼容性好,但冗余,仅在需支持老旧环境时启用 - render 中内联箭头(
onClick={() => this.handleClick()}):仅限简单逻辑,禁止在循环渲染中创建新函数(影响性能)
用 ESLint 规则固化规范
靠人盯不如靠工具。建议启用以下规则:
-
no-invalid-this:标记在非方法上下文中使用 this 的地方 -
no-arrow-condition(配合自定义规则):防止在条件表达式中误用箭头函数导致 this 错位 - 自定义规则拦截
this在对象字面量方法中的误用,例如检测{ fn: () => this.x } - 结合
typescript的no-explicit-any和 this 类型标注(如someMethod(this: MyClass))进一步锁定上下文


















