JavaScript中的this指向问题

JavaScript:this指向问题、同步和异步、 JS执行机制、location对象 this this 的指向在函数定义的时候 是确定不了的 只有函数执行的时候才能确定this指向谁 一般情况下 this 的最终指向的是那个调用它的对象 .全部作用域或者普通作用函数中 this指向全局对象window (定时器里面的 this指向window) 方法调用中 谁调用this指向谁 构造函数this指向构造函数 <body> <button> 按钮</button> <script> // this 指向问题 阅读详情

JavaScript中的this指向问题

1、什么是this

this一般指向的是调用它的对象,比如调用它的上下文是window对象,那就是指向window对象,如果调用它的上下文是某对象就是指向某对象……

//例如
<script>
	console.log(this) //window
</script>
//这里调用者是全局对象window,所以this指向window

image-20210511141509230

<script>
	var person = {
            name: 'dog',
            say: function () {
                console.log(this);
            }
     }
	 //这里调用者是person对象,所以this指向person
     person.say(); //person
</script>

image-20210511142232733

2、用来干嘛

this在一般情况下,是指向函数的上下文,可以处理一些作用域下的事件调用
如果想要引用某对象的方法,就不用写太多重复代码,直接用this调用某对象的方法

3、怎么在代码中使用

		console.log(this); //window

        var person = {
            name: 'dog',
            say: function () {
                console.log(this); //person
                console.log(this.name); //dog
            }
        }
        person.say();
        console.log(this.person.name); //dog   

4、改变this指向

4.1引入call、bind、apply

4.1.1区别

共同点

  1. 都是函数的内置方法
  2. 都可以改变函数执行的上下文

注:改变上下文可以为程序节省内存空间,减少不必要的内存操作
通俗易懂解释改变上下文:
小张在公司有个快递要拿,刚好有事,自己拿不了,他就安排小王拿,这里小张本来是拿快递的执行上下文,因为有事,就改变拿快递的执行上下文,变成了小王,节约了小张的时间,他就不用另外安排时间去拿快递了

不同点

  1. call、apply是立即执行,bind是不会立即执行,而是返回一个回调函数,执行时需要加个()
  2. call格式为call(this.obj,arg,arg,…) , 接收一个或多个由逗号隔开的参数
  3. apply格式为apply(this.obj,[argArray]),只接收两个参数,一个是新this对象,一个是数组参数(类数组对象)
  4. bind格式为bind(this.obj,arg,arg,arg,…),接收一个或者多个有逗号隔开的参数
4.1.2怎么用
//call 这里能传递多个参数,也能传递参数列表
		var name = 'cat'
        var person = {
            name: 'dog',
            say: function () {
                console.log(this) //window
                console.log(this.name) //cat
                console.log(arguments) //arguments对象
                console.log(...arguments) //pig bird
            },
        }
        //这里把this指向对象修改成window,此时this.name应该为cat
        person.say.call(this, 'pig', 'bird')
		person.say.call(this, ['pig', 'bird'])
注:
arguments对象是一个类数组对象,它具有数组长度length属性,但是又不同于数组,在参数传递上,不管对象函数是否设置形参,都可以接收用户传过来的参数,可以把参数通过数组形式的进行传递

image-20210511153337635

//apply 这里只能传递数组参数,否则会报错
		var name = 'cat'
        var person = {
            name: 'dog',
            say: function () {
                console.log(this) //window
                console.log(this.name) //cat
                console.log(arguments); //arguments对象
                console.log(...arguments);//pig bird
            }
        }
        //这里this指向为window
        person.say.apply(this, ['pig', 'bird'])
        person.say.apply(this, 'pig', 'bird')//报错



image-20210511153638841

//bind
		var name = 'cat'
        var person = {
            name: 'dog',
            say: function () {
                console.log(this) //window
                console.log(this.name) //cat
                console.log(arguments);//arguments
                console.log(...arguments);//pig bird
            }
        }
        //这里this指向为window,必须加个()才算执行
        person.say.bind(this, 'pig', 'bird')()
		//也可以写成
		var p = person.say.bind(this, 'pig', 'bird')
        p() 


image-20210511154434235

LK32T102 单片机 操作GPIO实现流水灯(1) 前言: LK32T10232(32位)单片机是一款专为电机控制器和数字电源开发的高性能 MCU。采Cortex-M0 内核,最高工作频率可达 72Mhz,ADC 采样速率 达 1Msps。同时具备协处理器单元可满足各种乘法、除法、移位以及各种 复杂函数运算。 LK32T102(32位)支持单电源供电,且内嵌高精度高速及低速振荡器,以及具备 多种低功耗工作模式。同时,集成了多路增强型 PWM,多通道模拟比较 器和高速运算放大器,可满足多种电机及功率控制应用,并简化系统成本。... 阅读详情

相关推荐

泛微E9集成登录实战:5分钟搞定第三方系统单点登录配置(附避坑指南)

本文详细解析了泛微E9集成登录的实战配置流程与核心原理。通过理解其基于信任代理的身份传递机制,文章指导用户如何在5-10分钟内完成第三方系统的单点登录对接,涵盖基础配置、核心参数设置、高级表达式应用,并提供了编码问题、账号不一致等常见避坑指南,助力企业快速构建统一身份认证门户。

weixin_29185493的博客 289

JavaScript中各种情况下this的指向问题(全面总结篇)

一、this–>undefined ES6的严格模式中,如果调用函数中的this或者顶层this将会指向undefined。 <script type="module"> function fn(){ console.log(this); } fn(); //undefined </script> <script type="module"> console.log(this); //undefi

闲岁的博客 990

dpdk 源码分析 rte_ring

rte_ring源码分析

qq_40843445的博客 929

JavaScript this 问题

thisJavaScript 中的this是一把双刃剑,灵活性强但容易引发混淆。通过掌握this的规则和常见场景,开发者可以避免常见问题并编写更清晰、健壮的代码。

Flying_Fish_roe的博客 848

Unity分包下载实战:AssetBundle+CDN+热更新全链路指南

分包下载是移动应用资源管理的核心技术,本质是将大体积安装包拆解为按需加载的独立资源单元,以解决用户安装意愿低、首屏启动慢、热更新不可控等关键问题。其底层依赖资源打包机制(如Unity AssetBundle)、全球分发网络(CDN)与安全热更新策略三者协同。AssetBundle提供资源隔离与依赖管理能力,CDN保障低延迟高可用下载,而热更新策略则决定版本控制、灰度发布与异常恢复的工程鲁棒性。该方案广泛应用于中重度游戏、大型工具类App及需要频繁内容迭代的商业项目,直接提升次日留存、过审成功率与用户在线时长

weixin_29762151的博客 352

[漏洞利用]利用五次Shift越权破解win7\win10开机密码

注:第一个学习和接触的Windows漏洞 文章目录本机实验环境前置知识漏洞原理漏洞介绍漏洞验证解决方法基本流程介绍详细步骤截图 本机实验环境 虚拟机:VMware Workstation 14 pro 操作系统:Windows10 前置知识 1、cmd工具路径 c:\windows\system32\cmd,按五次shift默认调用同目录下sethc文件,其路径为“c:\windows\system32\sethc.exe” 2、用户/账户密码存储位置 c:\windows\system32\config\

Y4tacker的博客 2万+

JavaScript中this指向问题

this指向windowl

Joyce的博客 572

【两方演化博弈代码复现】:双方演化博弈的原理、概率博弈仿真、相位图、单个参数灵敏度演化

演化博弈论是研究个体在特定环境中如何通过策略选择与其他个体进行互动的学科。这一理论在生物学、经济学和社会科学等多个领域都有广泛应用。本文将深入探讨双方演化博弈的原理及其过程,并解读一段 MATLAB 代码,展示如何模拟这一过程。

当回首往事的时候,不会因虚度年华而悔恨,也不会因碌碌无为而羞愧。 6198

JS的this指向问题(史上最全)

带你深入了解JS中this指向问题,小编建议弄懂this之前最好先弄懂作用域的概念!!!

qq_60619943的博客 9592

在 SAP S/4HANA 分析模型中添加 Measures,Calculated、Restricted、Currency Conversion 与 Unit Conversion 的建模思路

摘要: SAP S/4HANA分析查询建模中,度量(measure)的加工层级是关键难点,涉及聚合时机、币种/单位语义、过滤上下文等复杂因素。度量不仅是数字字段,还需处理计算口径(Calculated Measures)、上下文绑定(Restricted Measures)和单位转换等问题。Calculated Measures适合派生指标(如毛利率),需注意聚合前后计算差异;Restricted Measures通过固化过滤条件(如区分实际/计划金额)确保业务语义一致性。建模时应将业务逻辑下沉到分析模型层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1021

『MaxKB 2.x 开发环境搭建』在Windows下运行最新源码的完整步骤

本文将详细介绍如何在Windows系统中完成MaxKB最新版(2.x)开发环境的搭建,包括前端、后端以及数据库的配置,确保开发者能够顺利启动项目。

老陈聊架构 584

javascript中的this指向问题

js中的this指向问题

YangWenYu_lala的博客 277

杰理SDK入门教程(一):编译环境的安装和程序下载

本文档提供了杰理SDK在Windows系统下的开发环境配置与代码编译指南。主要内容包括:1) 开发环境安装步骤,需下载Code::Blocks和杰理工具链;2) 编译过程中常见问题的解决方案,如安全警告提示和链接文件缺失问题;3) 代码编译流程说明,包括打开工程、连接开发板、执行编译等步骤。文档特别强调了强制升级模式的操作方法,并指出需避免点击运行/调试按钮。最后提示了杀毒软件可能误报工具链的注意事项。

qq_42014563的博客 2737

js中的this指向问题以及改变this指向

JS中的this 指向问题 代码解释: <!-- <button>点击</button> --> <script> var Btn = document.getElementsByTagName("button")[0]; Btn.onclick = function(){ console.log(this); //button fun () } function fun(){

weixin_51723279的博客 266

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

js中this指向问题

在js中,this关键字的指向是一个比较重要的概念,它的值取决于函数的调用方式。

weixin_46541579的博客 1330

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

js this 阮一峰_JavaScript关于this指向的问题

前短时间在js this指向问题上有些迷茫,这段时间通过查阅一些资料以及看了阮一峰老师对this指向问题的解析,自己也深受体会,下面就谈一谈通过学习后自己对this指向的深入理解。一丶关于this不同方式 调用的不同的表现方式var obj = { a: 1, f1: function () { console.log(this.a) } }; var f1 = obj....

weixin_42525582的博客 1054

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JavaScript中this的指向问题

JavaScript中this的指向问题

cql_fan的博客 1059

关于JS中this对象指向问题总结

关于JS中this对象指向问题,相信做过项目的小伙伴多多少少都会遇到过,明明感觉代码写的没问题,可是运行的时候,就会报错,比如报错 xxx is not a function。我最近也遇到了,百度学习了不少前辈对于this对象指向问题的解析,于是总结了这篇文章。

铁锤妹妹的博客 4682

JS(javascript)中this的指向问题

众所周知,this的指向问题一直是JS中比较难的问题,很多时候我们都搞不清this到底指向的谁。今天,我就来给大家讲一下this的指向问题。 一句话概括:谁调用this,this就指向谁。 接下来给大家举几个简单的例子: var lilei = { name : "lilei", age : 18, say : function() { ...

weixin_44316351的博客 229

JS中的this指向问题(详细版)

JS中的this指向问题() 在全局作用域中 =>this -> window <script> console.log(this); //this->window </script> 在普通函数中 =>this取决于谁调用,谁调用我,this就指向谁,跟如何定义无关 var obj = { fn1:function() { console.log(this);

LoveyL0201的博客 1万+

JS中this指向问题

首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉),那么接下来我会深入的探讨这个问题。  为什么要学习this?如果你学过面向对象编程,那你肯定知道干什么用的,如果你没有学过,那么暂时可以不用看这篇文章,当然如

qq_42489251的博客 1969

JavaScript:this指向问题

this指向问题快速理解函数this指向问题_哔哩哔哩_bilibili。

m0_74141224的博客 689

JS中this的指向问题

各种情况下的this指向向问题全局环境下函数上下文调用普通函数的调用对象中函数的this指向总结改变this指向的三个方法箭头函数中的this指向问题定时器setTimeout&setInterval中函数的this指向问题补充 全局环境下 全局环境下,this始终指向全局对象(window), 无论是否严格模式; console.log(this); //window this.a = ...

weixin_41500253的博客 436

JavaScript(this指向问题、JS执行机制、location,history对象)

JSday12 文章目录JSday12this指向问题JS执行队列JS是单线程同步和异步同步异步JS执行机制(事件循环even loop)location对象location对象属性:location对象的方法history对象 this指向问题 this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,一般情况下this的最终指向的是那个调用它的对象。 全局作用域或者普通函数中this指向全局对象window(注意定时器里面的thi指向window) 方法调用中谁调用th

weixin_45886797的博客 423

js中的this指向问题

aliven1的博客 252
上一篇: MySQL的密码修改
下一篇: 前端之跨域
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值