浅谈JS中this在各个场景下的指向

yizhihongxing

让我们来详细讲解一下“浅谈JS中this在各个场景下的指向”。

1. this 介绍

在JavaScript中,this 指的是函数执行时所处的上下文对象。或者说,this 指的是调用该函数的对象。

this 可以在不同的环境下有不同的值,它的值取决于它所在的执行上下文。

2. this 在各个场景下的指向

2.1 在全局作用域下

在全局作用域下执行 this,它指向全局对象 window。

console.log(this); // 输出 window

2.2 在函数作用域下

在函数作用域下执行 this,它的值取决于函数是如何调用的。

2.2.1 函数作为函数调用

当函数被作为函数直接调用时,this 指向全局对象 window。

function demo() {
  console.log(this);
}
demo(); // 输出 window

2.2.2 函数作为对象方法调用

当函数作为对象的方法被调用时,this 指向调用该方法的对象。

var obj = {
  name: "John",
  demo: function() {
    console.log(this);
  }
};
obj.demo(); // 输出 obj 对象

2.2.3 使用 call() 或 apply() 方法调用函数

当使用 call() 或 apply() 方法调用函数时,这个函数的 this 指向调用 call() 或 apply() 方法的对象。

function demo() {
  console.log(this.name);
}
var obj1 = { name: "John" };
var obj2 = { name: "Smith" };
demo.call(obj1); // 输出 John
demo.apply(obj2); // 输出 Smith

2.3 在事件处理函数中

在事件处理函数中,this 指向触发事件的元素。

<button onclick="console.log(this)">Click me</button>

2.4 箭头函数中的 this

箭头函数没有自己的 this,它的 this 始终与包含它的最近一层非箭头函数的 this 相同,并且在全局作用域内使用箭头函数时,它的 this 始终指向 window 对象。

var obj = {
  demo: function() {
    var arrow = () => {
      console.log(this);
    };
    arrow();
  }
};
obj.demo(); // 输出 obj 对象

3. 总结

在JavaScript中,this 的值很多时候都是非常重要的,它的值会随着执行上下文的改变而改变。所以我们需要认真理解函数执行上下文的概念,并记得在不同的场景下如何正确地使用 this。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈JS中this在各个场景下的指向 - Python技术站

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

相关文章

  • 详解addEventListener的三个参数之useCapture

    addEventListener是DOM元素对象常用的事件绑定方法,其常用的用法如下: element.addEventListener(event, function [, options]); 其中,第三个参数options可以是一个布尔值,也可以是一个对象。当其是一个布尔值时,表示useCapture,即事件是否在捕获阶段(capturing phas…

    JavaScript 2023年6月11日
    00
  • 前端实现电子签名(web、移动端)通用的实战过程

    前端实现电子签名是一个比较复杂的过程,本文将以通用的实战过程进行详细讲解,主要包含以下几个步骤: 获取签名 处理签名数据 在页面上绘制签名 将签名保存并上传到服务器 1. 获取签名 获取签名有多种方式,常见的包括手写、鼠标绘制、触摸屏绘制等。本文以鼠标绘制为例进行讲解。 在页面上添加一个画布元素,并使用JavaScript获取该元素的上下文对象: <c…

    JavaScript 2023年6月11日
    00
  • js字符串的各种格式的转换 ToString,Format

    下面是JS字符串的各种格式的转换ToString,Format的完整攻略。 ToString 在JavaScript中,使用方法toString()可以把其他变量类型(除了undefined和null)转换成字符串。ToString方法有两种形式: 使用函数调用:toString() 使用String函数:String() 以下是两种形式的具体用法和示例说明…

    JavaScript 2023年5月28日
    00
  • 原生js实现针对Dom节点的CRUD操作示例

    下面我将为您详细讲解“原生JS实现针对DOM节点的CRUD操作示例”的攻略。 一、前提准备 在进行CRUD操作前,我们需要先获取DOM节点。可以使用document.querySelector()和document.querySelectorAll()来获取单个节点和多个节点。例如,以下代码可以获取id为“myDiv”的元素: const myDiv = d…

    JavaScript 2023年6月10日
    00
  • JS实现刷新网页后之前浏览位置保持不变示例详解

    JS实现刷新网页后之前浏览位置保持不变的功能,主要需要利用HTML5中的History API和Session Storage来实现。 具体过程步骤如下: 1.获取网页当前滚动位置,可以使用JavaScript代码document.documentElement.scrollTop或者document.body.scrollTop来获取当前滚动位置。 let…

    JavaScript 2023年6月11日
    00
  • 如何用JS模拟实现数组的map方法

    下面是使用JS模拟实现数组的map方法的完整攻略。 原理分析 Array.map() 方法可以对数组中的每个元素进行操作,生成一个新的数组,而不会改变原来的数组。其原理实际上就是循环遍历数组,每次将当前元素作为参数传入回调函数中进行操作,并将返回值存入新的数组中。 实现步骤 创建一个函数,命名为myMap。该函数需要两个参数,第一个参数是需要进行操作的数组,…

    JavaScript 2023年5月27日
    00
  • 浅谈js多维数组和hash数组定义和使用

    针对“浅谈js多维数组和hash数组定义和使用”的话题,我来进行详细讲解。 多维数组 JavaScript中的多维数组,其实就是由多个一维数组组成的数组。我们可以使用一维数组来构建多维数组,比如: const multiArr = [ // 二维数组 [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; const threeDArr = […

    JavaScript 2023年5月27日
    00
  • 简单的js表单验证函数

    下面是“简单的js表单验证函数”完整攻略的具体步骤: 1. 确定需求 在编写表单验证函数之前,需要明确需要验证的表单项和验证规则,以确定函数的参数和返回值。例如: 验证规则:姓名为必填项,只能输入中文字符 函数参数:需要验证的表单项的id或class名 函数返回值:验证通过返回true,验证失败返回false 2. 编写函数 根据需求编写表单验证函数,函数名…

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