关于JS中的.this

news2024/11/19 12:34:49

什么是.this?

在JavaScript中,this是一个非常重要的概念,它指的是函数执行的上下文对象。this的值取决于函数是如何被调用的,而不是在哪里被定义的。

.this的指向

在不同的场景中,.this指向并不是唯一的,下面举几个例子:

  1. 全局函数调用:

  2. 作为对象方法调用:

  3. 构造函数调用:

  4. 事件处理:

  5. 使用call或apply:

  6. 使用bind:

  7. 箭头函数:

  8. 作为函数参数调用:

  9. 使用new操作符调用普通函数:

  10. 嵌套函数:

每个场景中this的指向都取决于函数调用的方式和上下文环境。掌握这些规则对于编写清晰、可预测的JavaScript代码至关重要。

扩展

关于this的讨论,我们还可以深入探讨一些更高级或不那么显而易见的概念,这些可能会帮助你更好地理解和使用this

  1. 隐式绑定: 当函数作为对象的方法被调用时,this隐式绑定到该对象。如果方法被重新赋值给一个不同的对象,this会指向新的对象。

  2. 显式绑定: 使用callapplybind方法可以显式地设置this的值。bind方法返回一个新函数,其this值被永久绑定到提供的值。

  3. new绑定: 当使用new关键字调用函数时,this绑定到新创建的对象。即使函数不是作为对象的方法调用,只要使用new,就会创建一个新的对象。

  4. 箭头函数中的this: 箭头函数没有自己的this上下文,它会捕获其所在上下文的this值。这在回调函数中非常有用,特别是当回调函数需要访问其父作用域的this时。

  5. this的不可变性: 一旦this的值在函数调用时被确定,它就不能再被改变。即使使用callapply调用同一个函数,this的值也不会改变。

  6. this值的默认规则: 如果函数既不是作为对象的方法调用,也没有使用callapplybind显式设置this,那么在非严格模式下,this默认指向全局对象(在浏览器中是window)。在严格模式下,this的值是undefined

  7. this与原型链: 当你访问一个对象的方法时,如果该对象上不存在这个方法,JavaScript会沿着原型链向上查找,直到找到这个方法。在这个过程中,this始终指向最初调用方法的那个对象。

  8. 使用Function.prototype.callFunction.prototype.apply: 这两个方法允许你调用函数,并显式指定this的值。call方法接受一系列的参数,而apply方法接受一个参数数组。

  9. this在模块化开发中的应用: 在模块化开发中,this的使用需要特别注意,因为模块内部的函数可能不会按照预期的方式访问到外部的this

  10. this在异步编程中的角色: 在异步函数中,如回调函数或setTimeoutthis的行为可能不如预期,因为这些函数的调用上下文与定义它们的上下文不同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1838450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础——异常详解(Error 与 Exception )

Java异常主要分为 Error 和 Exception 两种 Error: Error 类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理。 EXception: Exception 以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被J…

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》Chapter 10插图

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 Chapter 10插图

C# 索引器与迭代器分部类详情

文章目录 一、迭代器二、查看Foreach执行中间语言三、foreach实现过程总结四、实现迭代器最常用的方法五、分布类概述及其使用六、索引器概述及声明七、索引器在类中的使用八、索引器在接口中的使用九、总结 一、迭代器 1、迭代器(iterator)解决的是集合…

饮食中的隐形杀手,该如何避免?

塑料发明至今,口碑经历了过山车式的翻转。 上世纪,塑料曾被誉为20世纪最伟大的发明之一,围绕着塑料科学研究诞生出了好几位诺贝尔奖得主。 1953年,因在高分子化学方面的贡献,德国科学施陶丁格获诺贝尔化学奖&#xf…

Stable Diffusion 秋叶整合包v4.7 :解压即用,快速入门AI绘画

Stable Diffusion秋叶整合包,超简单一键安装Stable Diffusion,无任何使用门槛,完全免费使用,支持Nvdia全系列显卡,来自B站up秋葉aaaki,近期发布了Stable Diffusion整合包v4版本,一键在本地部署S…

中国各区域人口密度可视化图

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247674303&idx1&sn830304f80a0429406c4a5e38dc7750ec&chksmfa777682cd00ff9434e4660bb52ab2bf19913b6732083de061664401a9ac0fa46581cd9e5e86&token1445576002&langzh_CN&scene21#we…

【TB作品】MSP430G2553,单片机,口袋板,流量积算仪设计

题9 流量积算仪设计 某型流量计精度为0.1%, 满刻度值为4L/s,流量计输出为4—20 mA。 设计基于MSP430及VFC32的流量积算仪。 具体要求 (1) 积算仪满刻度10000 L,精度0.1 L; 计满10000 L,自动归零并通过串口(RS232)向上位…

Llama 3 大型语言模型到底是如何炼成的?

Meta 在今年 4 月开源了 Llama 3 大型语言模型,这是 Meta,也是整个行业迄今为止功能最强大的开源 LLM。 那么 Meta 是如何训练 Llama 3 大型语言模型的,又在训练过程中遇到了什么问题,提出了什么新的解决方案呢?近日&…

【Nodejs 日志库 】

总结了几个比较好用的Nodejs日志库,我认为一个 合格的日志库 需要 支持多种传输,如文件、控制台、HTTP 等。可定制的日志级别和格式。异步日志记录。 根据上述的需求,挑选出 几款比较好用的日志库, 1. Winston(Gith…

如何灵活运用keil工具进行问题分析(2)— 定位FreeRTOS的栈溢出导致hardfault问题

前言 (1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02gmail.com,此消息至2025年1月1日前均有效 (2&#xff0…

防火墙中的NAT

防火墙的NAT NAT分类 源NAT 基于源IP地址进行转换。 我们之前接触过的静态NAT,动态NAT,NAPT都属于源NAT,都是针对源IP地址进行转换的。源NAT主要目的是为了保证内网用户可以访问公网。 先执行安全策略,后执行NAT 目标NAT 基于…

【归档】工作流审批初体验

title: 工作流审批初体验 typora-root-url: 工作流审批初体验 date: 2023-05-09 17:00:39 tags: 项目插件 文章目录 参考文档工作流审批 flowable设置工作流模型绑定用户 设计表单绑定表单 用户发起流程上传查看流程范围流程可视化 请假流程与OA流程子集关系 参考文档 迁移文…

Termius for Mac/Win:跨平台多协议远程管理利器

Termius for Mac/Win是一款备受瞩目的跨平台多协议远程管理软件,以其卓越的性能、丰富的功能和便捷的操作体验,赢得了广大用户的青睐。无论是在企业IT管理、系统维护,还是个人远程连接、文件传输等方面,Termius都展现出了出色的实…

webpack5入门,根据官方文档简单学习,简单总结

c.**loader加载器:**webpack 只能理解 JS文件和 JSON 文件,loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。(比如css,less&…

从理论到实践掌握UML

统一建模语言(UML)是软件工程师用来设计软件系统的一种工具,就像是一套图形化的说明书。它让开发团队能够以图形化的方式来理解、设计和开发软件系统,比起用文字来描述,更加直观易懂。本文通过UML实例化的理论和实践相…

小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析【二】

前面两期博文; 小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析 小米机型解锁bl 绕过社区等级5才可以解锁的限制的教程_没有五级社区怎么解锁bl-CSDN博客 小米对米粉解锁bl是越来越苛刻了。目前社区等级 答题 审核等等步骤越来越繁琐。而且通过率很低。知名开…

04 Pytorch tensor

一:老版本的 variable 二:新版 tensor 曾经:求导相关 如今:数据相关 –dtype: 张量的数据类型,三大类,共9种。torch.FloatTensor, torch.cuda.FloatTensor –shape: 张量的形状。如:&#x…

PTP简介及Linux phy ptp驱动实现

1、PTP简介 PTP(precision time protocol)精确时间协议,是一种时间同步的协议,对应 IEEE 1588 标准,是基于网络数据包的一种时间同步协议,1588v2的同步精度可以达到ns级,但1588协议对硬件有依赖。 2、PTP原理 时间同…

手把手!从头构建LLaMA3大模型(Python)

1. 前期准备 让我们先来想一想大概需要做什么。 首先是模型架构的选择。原工作用的是 GPT Neo 架构(可以看他们的 config),这个算是很老的模型了,最初是 EleutherAI 用来复现追踪 GPT-3 的工作的,现在用的也比较少了…

java入门1.4.0

前言: 在1.4.0版本中,更新了对语言三大要素的理解 红字为更新,绿字为迭代 这时我们目前拥有的知识 正片: 有了这些内容,我们就可以顺利进入到Spring Boot阶段了 Q:有人就会问,面向对象的特性…