JavaScript中this的值在函数调用时确定,遵循四条绑定规则:1.new绑定指向新实例;2.显式绑定由call/apply/bind指定;3.隐式绑定取点号前对象;4.默认绑定在严格模式下为undefined,非严格模式下为全局对象。
JavaScript 中 this 的值不是在函数定义时决定的,而是在函数被调用时才确定的——它取决于“谁调用了这个函数”。理解 this 的核心,就是掌握它的四条绑定规则(按优先级从高到低)。
当函数通过 new 关键字调用时,this 被绑定到新生成的实例对象上。
function Person(name) { this.name = name; }
const p = new Person('Alice'); // this 指向 p
使用 call()、apply() 或 bind() 时,第一个参数就是你明确传入的 this 值。
当函数作为对象的方法被调用(即形如 obj.method()),this 默认绑定到点号前的那个对象。
见陷阱:事件回调、定时器、回调函数中容易丢失 thisconst obj = { name: 'Bob', say() { console.log(this.name); } };
obj.say(); // 'Bob' —— this 是 obj
const fn = obj.say;
fn(); // undefined(非严格模式下是全局对象)
既没用 new,也没用 call/apply/bind,也不是对象方法调用,就进入默认绑定。
基本上就这些。实际判断时,按 new → 显式 → 隐式 → 默认 的顺序检查即可。记牢“调用位置决定 this”,而不是“定义位置”。