JavaScript 中的 `this` 是什么?为什么需要它?

161 阅读1分钟

一、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 让我们写的函数更通用、更灵活,能够在不同的上下文中,访问调用它的对象