JS-this指向

news/2024/11/27 22:44:15/文章来源:https://www.cnblogs.com/khrushchefox/p/18573261

普通函数

this的值取决于函数是如何被调用的

<body><script>// 函数普通中 this指向windowfunction foo() {console.log(this)}foo()// this的指向是在函数调用时确定的// 函数是由对象调用的, 函数中的this指向调用它的对象// 对于全局函数是由window对象调用的// window.foo()</script>
</body>

构造函数

构造函数中的this指向实例对象

<body><script>function Person() {// 构造函数中this指向创建的实例对象}var p = new Person()</script>
</body>

对象的方法

对象的方法中的this指向对象

<body><script>const obj = {sayHi() {console.log(this)},}obj.sayHi()</script>
</body>

事件回调

事件回调中的this指向触发事件的对象

<body><div>1111</div><script>const div = document.querySelector('div')div.addEventListener('click', function () {// 事件的回调用, 由对应dom对象调用的console.log(this)})</script>
</body>

定时器

定时器中的this指向window

<body><script>// 定时器的回调是由window对象调用的, 因此, 回调中的this指向window对象window.setTimeout(function () {console.log(this)}, 1000)</script>
</body>

箭头函数

箭头函数的this值是在函数定义时确定的,而不是在函数调用时。箭头函数会捕获其父级作用域的this值,无论这个this值如何变化,箭头函数中的this都会保持不变。

判断方法: 找this的父级作用域, 函数作用域全局作用域

<body><script>const fn = () => {console.log(this)}fn()const obj = {name: 'xiaoming',}// call()调用函数, 同时改变this的指向function foo() {// 在foo作用域中, this指向obj的console.log(this)const bar = () => {console.log(this)}bar()}foo.call(obj)</script>
</body>
function Person() {this.age = 0;// 普通函数setInterval(function growUp() {// 这里的this指向window或undefined(取决于是否在严格模式下)this.age++;console.log(this.age); // 这里的this不会按预期指向Person实例}, 1000);// 箭头函数setInterval(() => {// 这里的this捕获的是Person实例的thisthis.age++;console.log(this.age); // 这里的this会按预期指向Person实例}, 1000);
}var p = new Person();

应用

<body><button>点击</button><script>document.querySelector('button').addEventListener('click', function () {// 在事件回调中, this指向button的dom对象console.log(this)setTimeout(() => {// 在定时的普通回调中, this指向window// 在定时的箭头回调中, this指向外部(定义时)的this, 也就是domthis.innerHTML = '点击了'}, 1000)})// 在回调函数定义时, 尽量使用箭头函数</script>
</body>

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

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

相关文章

C语言中对文件的输入输出

在c中的文件操作 通过读的形式,打开文件用FILE打开 用FILE*类型的指针接受文件指针的首地址 并且我们可以用读或写的方式打开文件 使用r来读取文件当然也要判断是否读取文件成功,若读取成功fopen会传出指针,若失败则会传出空指针,所以要判断读取是否成功 当然,当文件不存在…

linux内核参数

1.查看所有内核参数 grubby --info=ALL2.查看内核参数应没应用,生没生效 cat /proc/cmdline3. /etc/default/grub 里 GRUB_CMDLINE_LINUX 的值

『模拟赛』NOIP2024加赛8

『模拟赛记录』NOIP2024加赛8Rank 唐A. flandre 签。 比较显然,由于 \(k\ge 0\),所以最终的序列一定为不降序列。首先将原序列升序排序,当任取一个子序列时,容易发现最后一个数越大一定越优,那么最后一个数取到最大值时,倒数第二个数一定越大越优,以此类推,最终取出的序…

manim边做边学--圆柱体

Cylinder是Manim中用于创建圆柱体对象的类。 Cylinder类在制作数学、物理或工程领域的动画时,可用于以下的场景中:演示几何概念:使用Cylinder类创建圆柱体,并通过改变其参数和方法来演示圆柱体的各种几何性质,如体积、表面积等。 模拟物理现象:使用Cylinder类来模拟圆柱体…

基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现十一

运行环境:windows/Linux均可、jdk1.8、mysql5.7、redis3.0、idea/eclipse均可。 技术点:SpringBoot+SpringDataJPA+Mysql+Freemaker+Bootstrap+JS+CSS+HTML 部分功能:前台竞价商品信息控制器Controller(商品列表、商品详情、报名、拍价、查看报名记录等 )一、前言介绍: 免…

Docker 实战:搭建本地 Registry 私有镜像仓库及批量导入脚本

前言:在我之前的博客中,我分享了 Harbor 仓库搭建的详细操作步骤。然而,在实际的生产环境中,并非每个 Docker 环境都需要部署一个规模庞大的 Harbor 仓库。有时,一个轻量级的本地 Registry 私有镜像仓库会更为便捷。本文将介绍如何搭建一个本地 Registry 私有镜像仓库,并…

Chrome联合Opera/Vivaldi/Waterfox等成立联盟对抗Microsoft Edge

日前在欧盟有个新的行业联盟成立,这个行业联盟名为浏览器选择联盟,主要成员包括 Google Chrome、Opera、Vivaldi、Waterfox 和 Wavebox。 成立联盟的主要目的是对抗微软的 Microsoft Edge 浏览器,该联盟致力于呼吁 / 游说欧盟将 MicROSoft Edge 按照数字市场法案列为看门人…

MySQL原理简介—12.MySQL主从同步

大纲 1.异步复制为MySQL搭建一套主从复制架构 2.半同步复制为MySQL搭建一套主从复制架构 3.GTID为MySQL搭建一套主从复制架构 4.并行复制降低主从同步延迟或强制读主库1.异步复制为MySQL搭建一套主从复制架构 (1)MySQL主从复制的原理 (2)搭建主从复制架构的配置(1)MySQL主从复制…

java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)

java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)@目录说明:基础工具类MsgPageResultResponseBusinessDomainEnum(枚举)EsDocumentConstants(常量)本人其他文章链接 说明:基础工具类Msg package com.geespace.microservices.data.computing.model.…

[MYSQL] MYSQL 时间与时区

MYSQL 版本:MYSQL 5.7.38-221001-logMYSQL 时间与时区概述 GMT(格林尼治标准时间、世界时间) 与 UTC(协调世界时间)‌GMT(Greenwich Mean Time,格林威治标准时间)‌:GMT是基于地球自转和对恒星的观测来定义的时间标准,将地球划分为24个时区。它以英国伦敦郊区的格林尼治天文…

51单片机入门:数码管(3)

数码管简介数码管每段其本质就是个LED灯,只需要控制特定的LED灯亮就能显示数据。普中开发版所使用的是两个并在一起共阴极连接的“4位数码管”,可以同时显示8个数字。数码管的显示可以分成静态显示和动态显示,这里先介绍最简单的静态显示。数码管分为共阴极连接和共阳极连接…

使用java在未知表字段情况下通过sql查询信息

使用java在未知表字段情况下通过sql查询信息场景 在只知道表名,不知道表包含哪些字段情况下,查询该表信息的场景 解决方案 @Testpublic void test() {Connection connection;String DB_URL = "jdbc:mysql://192.168.20.75:9950/geespace_bd_platform_dev?characterEnco…