JavaScript 中 this 的使用方法详解

一、全局环境中的 this

在全局环境中,this 指向全局对象。在浏览器中,全局对象是 window;在 Node.js 中,全局对象是 global

console.log(this); // 浏览器中输出:window

在严格模式下,this 的值为 undefined

"use strict";
console.log(this); // 输出:undefined

二、对象方法中的 this

this 出现在对象的方法中时,它指向调用该方法的对象。

const person = {name: "Alice",greet: function() {console.log(this.name);}
};person.greet(); // 输出:Alice

在上述代码中,this.name 的值为 person 对象的 name 属性。

三、构造函数中的 this

在构造函数中,this 指向新创建的实例对象。

function Person(name) {this.name = name;
}const alice = new Person("Alice");
console.log(alice.name); // 输出:Alice

在上述代码中,this 指向新创建的 Person 实例对象 alice

四、事件处理程序中的 this

在事件处理程序中,this 通常指向触发事件的 DOM 元素。

const button = document.querySelector("button");
button.addEventListener("click", function() {console.log(this); // 输出:button 元素
});

在上述代码中,事件处理程序中的 this 指向触发点击事件的 button 元素。

五、箭头函数中的 this

箭头函数与传统函数的最大不同之一是它没有自己的 this 绑定,this 的值由封闭上下文决定。

const person = {name: "Alice",greet: function() {const innerFunction = () => {console.log(this.name);};innerFunction();}
};person.greet(); // 输出:Alice

在上述代码中,innerFunction 是一个箭头函数,它的 this 继承自 greet 方法中的 this,即 person 对象。

六、callapplybind 方法

我们可以使用 callapplybind 方法来显式地设置 this 的值。

1. call 方法

call 方法可以显式地指定 this 的值并立即调用函数。

function greet() {console.log(this.name);
}const person = { name: "Alice" };
greet.call(person); // 输出:Alice
2. apply 方法

apply 方法与 call 类似,但它接受一个参数数组。

function greet(greeting) {console.log(`${greeting}, ${this.name}`);
}const person = { name: "Alice" };
greet.apply(person, ["Hello"]); // 输出:Hello, Alice
3. bind 方法

bind 方法会返回一个新的函数,并且永久性地绑定 this 到指定的值。

function greet() {console.log(this.name);
}const person = { name: "Alice" };
const boundGreet = greet.bind(person);
boundGreet(); // 输出:Alice

七、总结

JavaScript 中 this 的值取决于它的调用位置和上下文环境。理解 this 的工作原理对于编写正确和高效的 JavaScript 代码至关重要。无论是在全局环境、对象方法、构造函数、事件处理程序还是箭头函数中,this 的值都有其特定的行为方式。希望本文能帮助你更好地理解和使用 JavaScript 中的 this

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

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

相关文章

C++中的enum(枚举)是什么,以及与C中enum的不同之处

最近在看《A Tour of C 3rd》的时候发现 C 和 C 的 enum虽然使用起来比较相似,但是目的却略有不同。关于枚举的概念还请见之前写过一篇关于 C 的那篇博客《C语言中enum(枚举)详解》,这里不再赘述。本文侧重 C 与 C 不同的地方。 …

Vue56-组件的自定义事件

一、什么是自定义事件 二、子组件—【传值】—>父组件 2-1、prop属性 2-2、自定义事件 v-on在谁身上,就给谁绑定事件! 给谁绑定的事件,想触发就找谁! 2-3、prop属性VS自定义属性 2-4、简写形式 2-5、ref属性实现 加了ref属性…

软件监控发展简史

软件监控简史,从 00 年代开始。发生了什么变化?为什么事情变得如此神秘? 终端设备上日益重要的用户体验通过边缘计算和分布式计算不断得到改善。然而,服务质量的测量仍然使用基于服务器的原语进行。 我们的 2000 年软件监控是这样…

wvp-GB28181-pro 源码分析-服务启动流程及IPC注册(一)

文章目录 启动顺序1、VManageBootstrap文件中的main2、优先加载的bean3、gb28181/SipLayer.java4、media/MediaServerConfig.java5、conf/SipPlatformRunner.java6、gb28181/task/SipRunner.java2024年6月20日下载的wvp-GB28181-pro,版本号为2.7.2,使用ZLMediakit主干版本。 …

程序员兼职接单有哪些渠道?一篇文章带你了解!

2024年,程序员兼职接单别只盯着朋友圈啦!这些兼职接单渠道你一个都不容错过!想要通过兼职接单获取收入的程序员,一定不能错过这篇文章! 程序员兼职接单的渠道可以简单的分类为兼职平台和程序员论坛和自身人脉拓展三个…

【SD3辅助工具推荐】InstantX发布了三种SD3专属的ControlNet模式——Pose、Canny和Tile

InstantX 是一家专注于人工智能内容生成的独立研究机构。此前,曾开源著名的InstantID和论文《InstantID : Zero-shot Identity-Preserving Generation in Seconds》。随着本月12号,Stability AI正式开源了其产品 Stable Diffusion 3,这家机构…

吃透Flink State面试题和参考答案

目录 什么是 Flink 中的状态(State)? Flink 支持哪两种状态类型? 解释一下什么是 Keyed State 和 Operator State。 Flink 中的状态是如何存储的? 什么是 Flink 的状态后端(State Backend)? 比较 MemoryStateBackend、FsStateBackend 和 RocksDBStateBackend 的区…

js笔试题目2024

字符串按字符出现频次排序 "Aacbbcc" 输出 "cccbbAa" const s "Aacbbcc"function setString(string) {const map new Map();let res for(let char of string){const val map.get(char)map.set(char, val?val 1:1)}const arr Array.from(m…

(1)ubuntu g++使用

文章目录 g流程常用示例 g流程 预处理->编译->汇编->链接预处理: 展开头文件,宏替换,去除注释,条件编译 g -E test.cpp -o test.i -E 只进行预编译, 生成真正的源代码.i文件编译:检查语法,生成汇…

高效设计必选!5款好用的UI动效工具

UI 动态设计是应用程序设计的重要组成部分。随着技术的积累,UI设计中的动态效果遍地开花,UI动态效果可以使我们的页面更时尚、更有趣、更人性化。5G网络的快速发展也使美丽的动态效果几乎无缝地嵌入到UI界面中。今天,毫不夸张地说&#xff0c…

极氪与 TDengine 合作建设新一代车联网云端基础平台

在车联网场景中,智能车辆通过各种传感器按时采集车辆状态信息,包括但不限于行驶速度、发动机转速、轮胎压力、里程等。此外,某些事件触发后会生成车辆事件数据,例如门锁状态变化、碰撞、异常移动等。每次数据上报都包含时间戳&…

Visual Studio2022+cuda环境配置及代码调试

环境配置 下载并安装CUDA Toolkit 打开Visual Studio,新建项目。如下图所示,已经包含CUDA编程选项 代码调试 1、打开cu文件的属性页,按下图所示,将Host中的Generate Host Debug Information设置为“是" 2、不可勾选Nsight…

揭秘网络安全攻防战

网络安全攻防战综述 网络安全攻防战概念 网络安全攻防战是指在网络空间中,攻击者和防御者之间的持续斗争。攻击者(黑客)利用各种手段企图突破防御,窃取信息、破坏系统,而防御者则采取各种措施保护网络安全&#xff0…

ARM功耗管理框架之LPI

安全之安全(security)博客目录导读 思考:功耗管理框架?SCP?PPU?LPI?之间的关系?如何配合? 目录 一、功耗管理框架中的LPI 二、LPI分类 三、Q-Channel和P-Channel对比 四、Q-Channel和P-Ch…

网络故障排查-TCP标志位

目录 1. SYN(Synchronize) 2. SYN-ACK(Synchronize-Acknowledge) 3. FIN(Finish) 4. RST(Reset) 故障排除步骤 网络流量分析仪中的TCP标志位(SYN、SYN-ACK、FIN、RS…

第28讲:Ceph集群使用RBD块存储与K8S Volumes集成

文章目录 1.Ceph集群使用RBD块存储与K8S集成简介2.Ceph集群RBD块存储与K8S Volume集成2.1.在Ceph集群中创建K8S集群使用的块存储2.2.创建用于K8S访问Ceph RBD块设备的认证用户2.3.将认证用户的Key存储在K8S Secret资源中2.4.在K8S集群的所有节点中安装Ceph命令2.5.创建Pod资源使…

【uni-app学习手札】

uni-app(vue3)编写微信小程序 编写uni-app不必拘泥于HBuilder-X编辑器,可用vscode进行编写,在《微信开发者工具》中进行热加载预览, 主要记录使用uni-app过程中自我备忘一些api跟语法,方便以后编写查找使用…

【React 】折叠面板,点击展开时再请求数据

需求背景:使用折叠面板的形式展示数据,面板内部数据需要在打开时请求接口获取。 遇到问题:最开始使用Antd 的折叠面板组件,它对于数据直接渲染是没问题的,但是不好满足打开面板时再动态加载数据的需求,于是…

计算机视觉与深度学习实战,Python为工具,基于Simulink进行图像和视频处理

计算机视觉与深度学习是当代人工智能领域的两大热门技术,它们在图像识别、目标检测、视频分析等领域展现出巨大的潜力和应用价值。Python作为一种强大的编程语言,结合深度学习框架和Simulink等工具,为计算机视觉和深度学习的研究与实践提供了丰富的资源和平台。以下将结合Py…

JAVA中EasyPoi导出word文档附带表格数据

导入easy-poi相关依赖 <!-- word导出 方式&#xff1a;easypoi --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.4.0</version></dependency><dependency><…