跟我学习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超出精度数字问题的解决方法

    以下是关于JS超出精度数字问题的解决方法的完整攻略。 1. 问题背景 在使用JS进行数值运算时,可能会遇到精度丢失的问题,出现类似于以下的情况。 0.1 + 0.2 = 0.30000000000000004 这是因为JS采用64位双精度浮点数来存储数字,而二进制小数无法精确表示一些十进制小数,导致计算精度出现偏差。 2. 解决方法 为了解决这个问题,我们可…

    JavaScript 2023年5月28日
    00
  • Navigator sendBeacon页面关闭也能发送请求方法示例

    Navigator.sendBeacon()是一个异步方法,用于在浏览器后台向服务器发送小量数据。通常,该方法在页面关闭时使用,以确保在离开页面前将相关数据传输到服务器。该方法可以将数据发送到服务器,即使页面已关闭或卸载。 下面是使用sendBeacon()方法的完整攻略: 1. 定义数据 定义要传递的数据。可以使用FormData或JSON等格式。 con…

    JavaScript 2023年6月11日
    00
  • 判断一个变量是数组Array类型的方法

    判断一个变量是否为数组类型的方法: 有多种方法来判断一个变量是否为数组类型,下面介绍其中的几种方法: 方法一:使用Array.isArray()方法 Array.isArray()方法可以判断传入的参数是否为数组类型,若为数组类型,返回true;否则返回false。 示例代码如下: const arr = [1, 2, 3]; console.log(Arr…

    JavaScript 2023年5月27日
    00
  • js检测浏览器夜晚/黑暗(dark)模式方法

    如何检测浏览器的夜晚/黑暗模式 当用户在电脑或手机等浏览器中将主题从白天模式切换到黑夜模式时,浏览器会触发媒体查询 prefers-color-scheme。我们可以利用 JavaScript 检测媒体查询条件,推断出当前是白天还是黑夜模式。 检测浏览器是否支持 prefers-color-scheme 媒体查询 在使用 prefers-color-sche…

    JavaScript 2023年6月10日
    00
  • 初学JavaScript第一章

    初学JavaScript第一章:入门 在学习JavaScript时,第一章通常会介绍一些与JavaScript相关的基础知识。本章节将讲解如下几个方面: JavaScript简介 JavaScript开发工具 将JavaScript代码包含在HTML中的方式 控制台输出 JavaScript简介 JavaScript是一种脚本语言,通常用于增强网站的交互性。…

    JavaScript 2023年5月27日
    00
  • JS数组转字符串实现方法解析

    下面是“JS数组转字符串实现方法解析”的完整攻略。 前言 在实际的开发中,我们经常需要将 JavaScript 数组转换为字符串。这个过程并不复杂,但是我们需要注意一些细节,否则可能会出现不符合预期的结果。 本文将介绍多种将 JavaScript 数组转换为字符串的方法,其中涉及到 join() 方法、toString() 方法、JSON.stringify…

    JavaScript 2023年5月28日
    00
  • asp.net通过js实现Cookie创建以及清除Cookie数组的代码

    ASP.NET是一个Web应用程序框架,通过JavaScript可以创建Cookie并清除Cookie数组。下面是实现Cookie创建和清除Cookie数组的示例代码: 创建Cookie 要在ASP.NET网站中创建Cookie,我们可以使用JavaScript的document.cookie属性。下面是创建一个名为MyCookie,值为123的Cookie…

    JavaScript 2023年6月11日
    00
  • Javascript实现重力弹跳拖拽运动效果示例

    讲解“Javascript实现重力弹跳拖拽运动效果示例”的完整攻略如下: 【示例1】实现有重力的弹跳运动效果 1.效果实现思路 要实现有重力的弹跳运动效果,需要分为以下几个步骤: 定义小球元素 设置小球的初始位置和速度 定义重力加速度 实现小球的弹跳运动 给小球添加事件 2.代码实现 下面是完整的代码实现: <!DOCTYPE html> &lt…

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