严格模式下类方法的this行为不受影响,正常调用时仍指向实例;真正受影响的是脱离对象调用的场景(如fn=inst.m;fn()),此时严格模式下this为undefined。

在严格模式下,类方法内部的 this 行为本身不受影响——只要方法是通过对象正常调用(如 obj.method()),this 依然指向该实例对象,与是否启用严格模式无关。
类方法调用时 this 的实际归属
ES6 类中的方法默认定义在原型上,本质仍是普通函数。当使用 new MyClass() 创建实例后,调用 instance.method() 属于“隐式绑定”,此时 this 指向该实例,无论是否开启严格模式。
- 类构造函数中:
this总是指向新创建的实例(new绑定优先级最高) - 实例方法中:
this指向调用它的实例对象,不是全局对象,也不是undefined - 静态方法中:
this指向类本身(即构造函数),同样不因严格模式改变
严格模式真正影响的场景(非类方法调用)
严格模式主要改变的是普通函数独立调用或未绑定上下文的函数引用时的 this 值,例如:
- 把类方法赋值给变量后调用:
const fn = instance.method; fn();→ 此时脱离对象,严格模式下this为undefined(非严格模式下为window) - 在事件回调或定时器中直接传入类方法:
setTimeout(instance.method, 100);→ 同样丢失this,严格模式下执行时报错Cannot read property 'xxx' of undefined - 箭头函数无影响:类中用箭头函数定义的属性方法(如
handler = () => { ... })自动绑定外层this,严格模式不改变其行为
如何避免严格模式下的 this 问题
关键不是修改严格模式,而是确保方法调用时保持正确的上下文:
立即学习“Java免费学习笔记(深入)”;
- 用
bind(this)显式绑定:setTimeout(instance.method.bind(instance), 100); - 改用箭头函数作为回调:
setTimeout(() => instance.method(), 100); - 类字段语法(推荐):
handleClick = () => { console.log(this.value); },天然继承实例this - 在构造函数中提前绑定:
this.handleClick = this.handleClick.bind(this);
严格模式不会让类方法“默认指向 undefined”,它只让那些本就不该有 this 的调用场景暴露错误,反而帮助你及时发现上下文丢失问题。


















