一、this 的初衷是什么?
JavaScript 设计 this,是为了解决一个问题:
当一个函数被不同的对象调用时,它怎么知道“自己属于谁”?
JavaScript 允许函数在多个对象之间复用,比如:
function sayName() {
console.log(this.name);
}
const user1 = { name: "Alice", say: sayName };
const user2 = { name: "Bob", say: sayName };
user1.say(); // Alice
user2.say(); // Bob
函数 sayName 只写了一次,但可以通过 this 获取正确的调用者名字,这就是 this 的作用。
二、this 是什么?
在 JavaScript 中,this 指的是函数运行时的上下文对象,也就是谁调用了这个函数。
三、常见情况总结
| 情况 | this 是谁? |
|---|---|
| 普通函数调用 | 浏览器中是 window(严格模式下是 undefined) |
| 对象方法调用 | 调用它的那个对象 |
构造函数 new | 新创建的对象 |
| 箭头函数 | 外层作用域的 this |
call / apply / bind | 明确指定的对象 |
四、举例说明
1. 普通函数
function show() {
console.log(this);
}
show(); // window(浏览器里)
2. 对象方法
const person = {
name: "Tom",
sayHi() {
console.log(this.name);
}
};
person.sayHi(); // Tom
3. 箭头函数
const obj = {
name: "Alice",
say: () => {
console.log(this.name);
}
};
obj.say(); // undefined(this 不指向 obj)
五、一句话总结
this让我们写的函数更通用、更灵活,能够在不同的上下文中,访问调用它的对象。