📜  在 js 中使用 this 关键字 - Javascript (1)

📅  最后修改于: 2023-12-03 15:23:11.011000             🧑  作者: Mango

在 JavaScript 中使用 this 关键字

在 JavaScript 中,this 关键字通常用于表示当前正在执行的函数的上下文。具体来说,它指的是当前正在执行的代码所属的对象。这个对象可以是全局对象、函数对象、构造函数的实例对象等等。

全局对象中的 this

当在全局作用域中使用 this 关键字时,它会指向全局对象。在浏览器环境中,全局对象是 window,而在 Node.js 环境中,全局对象是 global。

例如:

console.log(this); // 在浏览器中输出: Window { ... }

这是因为全局作用域中的代码属于全局对象,而 this 关键字恰好指向当前执行代码所属的对象,因此它指向了全局对象。

函数中的 this

当在函数中使用 this 关键字时,它的值的取决于函数被调用的方式。一般来说,this 的值可以分为以下几种情况:

作为函数的普通调用

在函数中作为普通函数进行调用时,this 关键字将指向全局对象(浏览器环境中是 window,Node.js 环境中是 global)。例如:

function foo() {
  console.log(this);
}

foo(); // 在浏览器中输出: Window { ... }
作为对象的方法调用

当函数作为一个对象的方法进行调用时,this 关键字将指向这个对象。例如:

const obj = {
  name: 'Alice',
  sayName() {
    console.log(this.name);
  }
};

obj.sayName(); // 输出: Alice

这是因为 sayName 函数作为 obj 的一个方法进行调用时,它的 this 关键字指向了 obj 对象。

作为构造函数调用

当函数被用作构造函数来创建一个新的对象时,this 关键字将指向这个新创建的对象。例如:

function Person(name) {
  this.name = name;
}

const alice = new Person('Alice');
console.log(alice.name); // 输出: Alice

在这个例子中,当使用 new 关键字调用 Person 函数时,它的 this 关键字指向了新创建的 alice 对象。

使用 call 或 apply 调用

call 和 apply 是 JavaScript 中用于调用函数的两个方法。它们的第一个参数都将作为 this 关键字的值。例如:

function foo() {
  console.log(this.name);
}

const obj = {
  name: 'Alice'
};

foo.call(obj); // 输出: Alice

在这个例子中,我们调用了 foo 函数并使用 call 方法,将 obj 对象作为第一个参数传递进去。这样,this 关键字就指向了 obj 对象。

总结

this 关键字在 JavaScript 中非常重要,它通常用于表示当前正在执行代码所属的对象。在不同的上下文中,this 关键字的值可能会不同,所以需要仔细理解不同情况下它的行为。