跟我学习javascript的this关键字

当编写 JavaScript 代码时,经常会使用 this 关键字。它可以引用当前上下文中的对象,其行为特点是动态绑定。但是,该关键字在不同的上下文环境中使用可能会产生不同的结果,这常常导致初学者的困惑。本文将深入讲解 JavaScript 的 this 关键字, 帮助初学者理解并正确运用它。

1. this关键字指向全局对象

在全局环境中,使用 this 关键字会指向全局对象,即浏览器中的 window, Node.js 环境中的 global。以下是一个简单的示例:

console.log(this); //输出结果为:Window {…} 或 global {...}

在浏览器控制台中,上述代码会输出全局对象 Window。

2. this关键字指向对象

当在对象内部使用函数时, this 关键字会指向该对象。例如:

let person = {
  name: "ZhangSan",
  age: 18,
  sayHello: function() {
    console.log("Hello, I am " + this.name + ", " + this.age + " years old.");
  }
}

person.sayHello(); //输出结果为:Hello, I am ZhangSan, 18 years old.

上述代码中,this 引用了 person 对象。因此,当调用 person.sayHello() 时,this 指向该对象,输出结果为:Hello, I am ZhangSan, 18 years old.

如果在普通函数内部使用 this 关键字时, this 将指向全局对象,而非最近的对象。例如:

let person = {
  name: "ZhangSan",
  age: 18,
  sayHello: function() {
    console.log("Hello, I am " + this.name + ", " + this.age + " years old.");
  },
  sayHi: function() {
    function inner() {
      console.log("Hi, I am " + this.name); //此处的this将指向全局对象
    }
    inner();
  }
}

person.sayHi(); //输出结果为:Hi, I am undefined

上述代码中,sayHi() 函数内部使用了普通函数 inner(), 导致其中的this关键字指向了全局对象。因此,在调用 person.sayHi() 时,输出结果为:Hi, I am undefined。

为了正确地引用 this 关键字,可以使用箭头函数来代替普通函数,因为箭头函数的 this 关键字可以按照所在上下文继承上一层作用域内的 this 值,不会改变其指向。例如:

let person = {
  name: "ZhangSan",
  age: 18,
  sayHello: function() {
    console.log("Hello, I am " + this.name + ", " + this.age + " years old.");
  },
  sayHi: function() {
    let inner = () => {
      console.log("Hi, I am " + this.name); //此处的this会继承最近的person对象
    }
    inner();
  }
}

person.sayHi(); //输出结果为:Hi, I am ZhangSan

在上述代码中,已经通过箭头函数确保了inner()中的 this 关键字指向了 person 对象。因此,在调用 person.sayHi() 时,输出结果为:Hi, I am ZhangSan。

除了上述内容,还有以下内容需要注意:

  • 在构造函数中,this 关键字指向新创建的对象,即构造函数的实例对象。
  • 在使用 call() 或 apply() 方法调用函数时,可以以参数的形式传递一个上下文(即 this 绑定的对象)。
  • 在使用 bind() 方法调用函数时,也可以指定函数内 this 的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:跟我学习javascript的this关键字 - Python技术站

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

相关文章

  • JS操作时间 – UNIX时间戳的简单介绍(必看篇)

    JS操作时间 – UNIX时间戳的简单介绍(必看篇) 在Web开发中,经常需要使用JavaScript操作时间,比如获取当前时间、格式化时间、计算时间差等。其中,UNIX时间戳是一个非常重要的概念。本文将介绍UNIX时间戳的基本含义、使用方法以及示例应用。 什么是UNIX时间戳 UNIX时间戳是自1970年1月1日00:00:00 UTC到某个时间点所经过的…

    JavaScript 2023年5月27日
    00
  • php 解析xml 的四种方法详细介绍

    下面是关于”php解析xml的四种方法详细介绍”的攻略。 目录 背景 方法1:使用 SimpleXML 扩展 方法2:使用 DOM 方法3:使用 XMLReader 方法4:使用 SAX 总结 背景 为了在 Web 应用程序中处理 XML 数据,了解如何在 PHP 中解析 XML 是一个很好的技能。 PHP 有多种解析 XML 的方法 可供选择。在此处提供 …

    JavaScript 2023年6月10日
    00
  • JavaScript中数组Array方法详解

    JavaScript中数组Array方法详解 在JavaScript中,Array是一个非常重要的数据类型,它提供了很多有用的方法来对数组进行操作。在本文中,我们将会学习到这些方法的具体用法和示例。 创建数组 在JavaScript中,我们可以通过以下方式创建一个数组: // 方式1:使用[]括号 const arr1 = []; // 方式2:使用Arra…

    JavaScript 2023年5月27日
    00
  • 举例说明JavaScript中的实例对象与原型对象

    让我来详细讲解一下JavaScript中的实例对象与原型对象。 什么是实例对象? 在JavaScript中,每当我们使用构造函数创建一个新对象时,就会创建一个实例对象。实例对象是该构造函数的一个新实例,它将继承构造函数的所有属性和方法,并且可以根据需要添加新的属性和方法。 以下是创建一个实例对象的示例代码: // 构造函数 function Person(n…

    JavaScript 2023年5月27日
    00
  • 由 JavaScript 的 with 引发的探索

    标题:由 JavaScript 的 with 引发的探索 背景 JavaScript 中的 with 关键字让你可以在代码中使用更简洁的语法来访问一个对象的属性。然而,使用 with 带来的优雅语法留下的是性能问题。本文将介绍如何使用 JavaScript 的基本概念和语法,避免 with 带来的问题。 问题 使用 with 增加了用于作用域查找的代码,导致…

    JavaScript 2023年6月11日
    00
  • React路由鉴权的实现方法

    React路由鉴权是指在用户访问某些需要权限的页面时,需要先判断用户是否有权限访问该页面,如果没有权限则需要进行跳转或者提示用户登录等操作。以下是一些实现路由鉴权的方法。 1. 基于react-router-dom react-router-dom 是 React 官方提供的路由组件库,可以通过它来实现路由鉴权。它提供了一些组件,如 Route、Redire…

    JavaScript 2023年6月11日
    00
  • js 声明数组和向数组中添加对象变量的简单实例

    下面是关于JS声明数组和向数组中添加对象变量的简单实例的完整攻略。 一、JS声明数组 在JS中声明数组可以使用Array关键字或简单的方括号[]来完成,比如: // 使用Array关键字声明 let arr1 = new Array(); // 简单使用方括号声明 let arr2 = []; 以上两种声明方式是等价的。 二、向数组中添加对象变量 要向JS数…

    JavaScript 2023年5月27日
    00
  • 如何在JavaScript中等分数组的实现

    要在JavaScript中实现将一个数组等分成n个子数组的过程,可以按照以下步骤进行: 设置一个函数,用于等分数组 首先,我们需要设置一个函数,用于将原始数组等分成n个子数组。该函数可以设置两个参数,分别是原始数组和要分成的子数组的个数。 function splitArrayIntoChunks(array, chunks) { // 在此处添加代码 } …

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