ECMAScript 2020: 理解 JS 中 this 指向的几种情况

阅读时长 3 分钟读完

在 JavaScript 中,this 关键字是一个非常重要的概念。它可以指向不同的对象,具体取决于在哪个上下文中使用它。在本文中,我们将深入探讨 this 的几种情况,并提供一些实用的示例代码,帮助您更好地理解和使用它。

全局环境中的 this

当在全局环境中使用 this 时,它将指向全局对象。在浏览器中,这个全局对象是 window 对象。在 Node.js 中,它是 global 对象。

函数中的 this

在函数中,this 的值取决于函数的调用方式。如果函数作为对象的方法调用,则 this 将指向该对象。如果函数作为普通函数调用,则 this 将指向全局对象。

-- -------------------- ---- -------
----- --- - -
  ----- -------
  ------- -
    ------------------- ----------------
  -
--

------------ -- ------ -----

-------- ------- -
  ------------------- ----------------
-

-------- -- ------ ---------

在上面的示例中,当 greet() 作为全局函数调用时,this 指向全局对象。因此,this.name 的值为 undefined。

构造函数中的 this

当使用 new 运算符创建一个对象时,构造函数中的 this 将指向新创建的对象。

在上面的示例中,构造函数 Person 的 this 指向新创建的对象 john。因此,this.name 的值为 'John'。

call() 和 apply() 中的 this

JavaScript 中的函数具有 call() 和 apply() 方法,这两个方法可以用来改变函数中的 this 指向。

-- -------------------- ---- -------
----- ---- - - ----- ------ --
----- ---- - - ----- ------ --

-------- ------- -
  ------------------- ----------------
-

----------------- -- ------ -----
------------------ -- ------ -----

在上面的示例中,通过使用 call() 和 apply() 方法,我们可以将函数中的 this 指向不同的对象。

箭头函数中的 this

箭头函数与普通函数的一个重要区别是,箭头函数中的 this 始终指向其定义时的上下文,而不是调用时的上下文。

在上面的示例中,箭头函数 greet() 的 this 指向全局对象,因为它是在全局上下文中定义的。因此,this.name 的值为 undefined。

结论

通过本文的讲解,我们了解了 JavaScript 中 this 的几种情况,并提供了一些实用的示例代码。理解和掌握 this 的用法对于写出高质量的 JavaScript 代码非常重要。希望本文可以帮助您更好地理解和使用 this。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67569aa6d784fd63e2c69fef

纠错
反馈