深入浅出聊一聊js中的’this’关键字

yizhihongxing

当我们在写 JavaScript 代码时,经常会遇到在当前函数作用域内使用 this 关键字的情况。但是,this 关键字在不同的环境下,它所代表的对象不尽相同。在这里,我们将深入浅出的聊一聊 JavaScript 中的 this 关键字,解释它在不同情况下的行为,并提供一些示例说明。

什么是 this 关键字

在 JavaScript 中,this 关键字是一个指向对象的引用,它代表当前函数执行时的上下文环境。

在全局作用域下,this 关键字表示当前 window 或 global 对象。而在函数中,它代表调用该函数的对象。

this 的指向

当我们在实际开发中使用 this 关键字时,它可能会指向不同的对象,这会导致我们的程序出现错误。因此,我们必须清楚 this 的指向,才能正确地使用它。

指向全局对象

如果函数在全局作用域下调用,那么 this 关键字就指向全局对象 window 或 global。

console.log(this === window); // true

function test() {
  console.log(this === window); // true
}

test();

指向调用它的对象

当函数被对象调用时,this 指向调用这个函数的对象。

const user = {
  firstname: 'John',
  lastname: 'Doe',
  greet: function() {
    console.log(`Hello, ${this.firstname} ${this.lastname}!`);
  }
}

user.greet(); // 输出 "Hello, John Doe!"

使用 call 或 apply 方法指定 this 指向

JavaScript 中的 call 和 apply 方法可以让我们在调用函数时指定 this 指向。

const person1 = {
  firstname: 'John',
  lastname: 'Doe',
  greet: function() {
    console.log(`Hello, ${this.firstname} ${this.lastname}!`);
  }
}

const person2 = {
  firstname: 'Jane',
  lastname: 'Doe',
}

person1.greet.call(person2); // 输出 "Hello, Jane Doe!"
person1.greet.apply(person2); // 输出 "Hello, Jane Doe!"

箭头函数中的 this

在箭头函数中,this 指向的是它所在上下文中的 this,而不是调用它的对象。

const user = {
  firstname: 'John',
  lastname: 'Doe',
  greet: function() {
    const message = `Hello, ${this.firstname} ${this.lastname}!`;
    const sayHello = () => console.log(message);
    sayHello();
  }
}

user.greet(); // 输出 "Hello, John Doe!"

在上面的例子中,sayHello 函数是一个箭头函数,它的上下文是 user.greet 函数的上下文,因此 this 指向 user。

总结

在 JavaScript 中,this 关键字代表当前函数执行的上下文环境。它的实际指向取决于函数在哪个作用域下被调用。如果函数在全局作用域下调用,this 指向全局对象 window 或 global。而当函数被对象调用时,this 指向调用这个函数的对象。通过调用 call 或 apply 方法,我们可以手动指定函数的 this 指向。在箭头函数中,this 指向的是它所在上下文中的 this,而不是调用它的对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入浅出聊一聊js中的’this’关键字 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 详解JavaScript实现简单的词法分析器示例

    下面是详解“详解JavaScript实现简单的词法分析器示例”的完整攻略: 一、词法分析器概述 词法分析器是编译器中最简单的部分之一,它的主要功能是将代码分解为有意义的词法单元,例如关键字、标识符、常量、操作符等。在构建词法分析器时,我们可以使用许多工具和技术,例如正则表达式、自动机、递归下降解析器等。 二、实现一个简单的词法分析器 下面我们将介绍如何使用J…

    JavaScript 2023年5月28日
    00
  • javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同

    下面详细解释 JavaScript 中的字符串替换函数 replace() 方法与 C#、VB 替换的不同之处。 JavaScript 中的 replace() 方法可以接收两个参数,第一个参数是被查找的字符串,第二个参数是用来替换查找到的字符串的字符串。通过这个方法,我们可以用一个字符串替换另一个字符串中的子串。 C#、VB 中的字符串替换方法也类似,在 …

    JavaScript 2023年5月28日
    00
  • 学习JavaScript设计模式之状态模式

    以下是详细的攻略: 学习JavaScript设计模式之状态模式 状态模式是什么? 状态模式是一种行为型设计模式,它允许对象在其内部状态更改时更改其行为。这个模式的主要想法是通过创建有限状态机来满足状态相关行为的需要。 状态模式的优点? 优化大型、复杂代码的结构。 减少了 if 语句的使用,使得代码更加简洁。 更好的可扩展性,可以方便地增加、删除或修改状态,而…

    JavaScript 2023年5月28日
    00
  • 获取阴历(农历)和当前日期的js代码

    获取阴历(农历)和当前日期是网站中常见的功能之一。使用JavaScript实现这个功能需要借助第三方库或者手写算法。 一、使用第三方库 推荐使用lunar-calendar这个JavaScript库,该库提供了方便的API实现将阳历日期转换为阴历日期。在获取当前日期的情况下,可以直接使用JavaScript的Date对象获取。具体步骤如下: 下载lunar-…

    JavaScript 2023年5月27日
    00
  • 常用ASP函数集【经验才是最重要的】

    常用ASP函数集【经验才是最重要的】 ASP是一种动态网页开发语言,常用于构建企业级Web应用程序。在ASP中,预定义了许多函数,可以帮助我们简化代码、提高开发效率。本文将介绍一些常用的ASP函数,以便开发人员更加方便、快速地创建 Web 应用程序。 字符串操作 Left、Right、Mid 函数 这三个函数都是对字符串进行截取操作的函数。 Left 函数:…

    JavaScript 2023年6月11日
    00
  • React-Native之定时器Timer的实现代码

    下面是关于“React-Native之定时器Timer的实现代码”的完整攻略: 什么是定时器? 在React-Native中,我们可以使用定时器来处理一些需要在指定时间间隔内执行的任务。React-Native提供了两种类型的定时器:基于时间间隔的定时器和基于帧率的定时器。此处我们重点讲解基于时间间隔的定时器。 基于时间间隔的定时器用法 React-Nati…

    JavaScript 2023年6月11日
    00
  • JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析

    JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析 在JavaScript编程中,数据类型(Data Type)是非常重要的概念,因为不同的数据类型有着不同的处理方式。JavaScript中的数据类型可以分为基本数据类型和引用数据类型,同时数据的存储方式也不同,有堆和栈的区别。 基本数据类型(Primitive Type) JavaScript中的…

    JavaScript 2023年5月28日
    00
  • 微信小程序页面间跳转传参方式总结

    下面是关于“微信小程序页面间跳转传参方式总结”的完整攻略。 前言 在微信小程序的开发中,我们经常需要在不同页面之间进行跳转,并且需要在页面之间传递参数。本文将总结出在微信小程序中实现页面之间传参的多种方式,并详细讲解其使用方法和注意事项。 方式一:通过 URL 参数传递数据 通过 URL 参数传递数据是最简单的一种传参方式。我们可以通过 wx.navigat…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部