百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 行业知识 > 正文

JavaScript中的this指向

citgpt 2024-11-25 10:03 5 浏览 0 评论

在编程语言中,我们都会看到有this的出现,但是JavaScript比较特殊,this在其中的含义与其他语言很不相同

例如在Java中,this一般只会出现在类的方法中,也就是说想使用this需要先创建一个类,同时this表示的就是当前调用的对象

JavaScript中的this指向

然而在JavaScript中的this表达的含义有很多种,这也使得我们许多前端开发的小伙伴们有点迷惑,从而无法真正的掌握其用法,那么这篇文章就带你一起来学习JavaScript中的this。

JavaScript中的this的绑定规则?

this在执行的上下文中会绑定一个对象,但究竟怎么绑定或者根据什么条件绑定,是有一套规则,我在这里称之为this的绑定规则,在讲述规则之前,先来看一下在网上找到的关于this指向的信息。

通过上面表格中的内容,我们可以大致了解this的指向,但是感觉还是有些迷惑,例如普通函数的调用是都指向window吗?构造函数的this为什么指向的是实例对象?等等...

要想搞清楚这些疑惑,我们必须了解其原理。

首先我们为什么要使用this?使用this有什么好处?

我们可以来看一下两段代码



看上去下边的代码只是比上边多了this的使用,但是上边的代码依旧可以正常执行,从某些角度来说,开发中如果没有this,也是有很多解决方案的,看似这样的调用是没有问题的,但是存在一些弊端。

在实际开发中我们的业务代码可能会有上百行或者上千行,当我们想要修改或者复用obj对象时,上边的代码需要将每一处的obj做修改,而下边的只需要修改对象名称即可,大大提高了开发效率。

当然this在实际开发中的作用还不止这一点,很多地方都有它的应用,这也是它让人困惑的原因。

this的指向?

this在全局作用域下的指向是什么?

在浏览器环境中,全局作用域下的this指向的是window

在node环境中,全局作用域下this的指向是{}

因为在node环境中没有window,所有的js文件都会被当作一个个单独的模块来执行

加载->编译->放入到一个函数中->通过call来调用该函数执行

感兴趣的小伙伴可以去看一下node的源码,在这里我们就不过度展开了。

我们来说浏览器环境

当我们在全局作用域下输出this时,在浏览器中会打印window。

当我们在全局作用域下定义一个函数并使用不同的方式调用,this的指向完全不同,可见普通函数调用this指向是window的说法并不严谨。

从以上三种结果我们暂时可以总结出四点:

1.函数在调用时,JavaScript会默认给this绑定一个值;

2.this的绑定和函数定义的位置没有关系;

3.this的绑定和函数的调用方式以及调用位置有关系;

this是在函数被执行时绑定的;

当我们知道以上四点后,就可以来学习this的绑定规则。

1.默认绑定

当我们对一个函数进行独立调用时,就会使用默认绑定

通常默认绑定会将window绑定给this

2.隐式绑定

这是一种很常见的调用方式,通过对象进行调用

这时候this会被绑定到该对象上

隐式绑定前提条件:

必须在调用的对象内部有一个对函数的引用,如果没有引用,在调用是就会报错,找不到该函数,正是通过这样的引用间接的将this绑定到这个对象上。

3.显示绑定

在实际开发中如果我们不希望在对象内部包含这个函数的引用,同时有希望使用该对象强制调用,该如何做?

在JavaScript中所有的函数都可以使用call和apply方法(箭头函数除外,这个跟函数的prototype有关,而箭头函数没有protype)。

这两个方法都可以绑定指定参数给this,接受的第一个参数便是要绑定的this。而两者不同在于前者接收的第二个参数为参数列表,后者则是一个数组。

以上代码便是通过call方法将fn函数的this绑定给obj对象

call与apply方法的区别

除了以上那个两种方式,显示绑定规则中还有一项就是bind

bind与call,apply最大的区别在于bind不会调用函数,只负责绑定。

可简单理解为某个函数通过bind绑定this,返回值是一个函数。

4.new绑定

在JavaScript中可以使用new关键字来调用某一个函数,被称之为构造函数。

this会绑定到被创建出来的对象,为什么会是这样?我们就要搞明白,当通过new来调用某一函数时究竟发生了什么?

1.会在内存中开辟一块空间,生成一个新的对象;

2.会将函数的prototype赋值给该对象的__proto__;

3.构造函数内部的this会指向被创建出来的对象;

4.执行函数中的代码;

5.自动返回被创建的对象;


绑定规则的优先级

默认绑定规则优先级最低,显示绑定高于隐式绑定,因为显示绑定是强制性的,new绑定优先级也高于隐式绑定而且高于bind绑定,但是new绑定和call,apply无法同时使用所以不存在谁的优先级更高。

箭头函数

在没有箭头函数之前,我们想使用定时器,并且想在定时器中访问到对象的this,通常会对this做一个转存,因为setTimeout是被强制绑定给window(是由浏览器实现),那如果我们不想转存该如何做?

使用箭头函数

就是如此简单,但这里又引入了另外一个问题,箭头函数this的绑定规则是什么?

箭头函数是不绑定this的,它会沿着自己的作用域向上查找,如果查找到全局作用域还没有找到,就会被绑定为window

以上便是JavaScript中this的绑定规则,希望这篇文章能帮助到正在学习前端开发的小伙伴,加油!!!

相关推荐

Win7打开网页特别慢的原因?

经常打开Web的频繁用户的数量应该打开,因此,一旦网页的速度很慢,它会变得非常敏感。最近,Win7系统的用户发现他们打开了他们的网页,突然放慢了,绝不看网络速度和配置因素,最有可能是系统内存问题。如果...

电脑浏览器下载速度很慢怎么办

有网友反映自己的浏览器下载速度很慢怎么办?这种通过可能是浏览器缓存太多,没有优化等原因导致。下面小编就以几种常用的浏览器为例,给大家解答下...

网站打开慢的问题如何解决?

  当我们在浏览网页时,突然发现一个网站打不开或者加载速度非常慢,这时候你会不会感到很烦躁呢?别担心,今天我们就来教你解决网站打开慢的问题!  一、检查网络连接  我们需要确保自己的网络连接正常。请尝...

打开网页速度慢、下载速度慢、玩游戏延迟、频繁掉线的解决方法

影响实际上网速度的因素非常多,需要挨个做排查1、先排除是否是网络环境问题,可以核实以下情况,来判断是否是网络环境问题。(1)同一网络环境,如果其他电脑上网也很慢,则可判断是网络本身速度不快导致的。(2...

浏览器太卡、启动慢,教你一招提速至少一倍!

电脑端浏览器用久了都会有一个毛病那就是开启速度非常缓慢今天教大家一个小技巧可大大提升浏览器启动速度适用于QQ、360、搜狗等大多数浏览器提速效果非常明显启动速度至少要快一倍SpeedyFox支持平台:...

网站访问慢的排查方案(最详细)

说实话,比起网站打不开,网站访问慢更让人抓狂。因为造成网站访问慢的因素太多了,一般用户根本无从下手!任他千头万绪的问题,从以下三个方面入手,也能轻松破解访问慢的大难题:响应时间、执行时间、加载时间。...

电脑网页打开慢怎么办?金山毒霸电脑医生秒搞定

??在网络时代,上网是每天都会做的事,平时用手机上网比较多,但是工作的时候还是用电脑上网的,不管手机还是电脑都会越用越慢。有时会觉得,电脑配置也不低,每天都清理垃圾了都,网速也还行电脑怎么还上网这么慢...

家里wifi慢是怎么回事?教你几招提速方法

没WiFi,不成活!手机和WiFi之间,就像空调加棉被,谁也离不开谁。如今WiFi已经填满了我们生活的每个角落,很难想象,如果哪天没了网,世界会变成什么样!可是家里的WiFi是越用越慢,不知道有多少人...

连接路由器宽带测速正常,打开网页很慢?

电脑连接路由器后测试网速和申请的宽带一致,但打开网页的速度较慢,请参考以下步骤排查:1、更改DNS服务器电脑上获取的DNS服务器不稳定可能会导致打开网页较慢,可以在电脑的本地连接或无线连接手动设置DN...

手机打开网页非常慢,那是你用的浏览器不对!

今天世超独宠Android差友不知道大家平日里,在刷着微博浏览着新闻的时候有没有遇见过这样的情况:在你浏览的过程中,总会出现一些让你感兴趣的链接。这些链接可能是:”这个视频,女人不在家男人偷偷看!”“...

网站打开慢的原因有哪些?

网络能够为大家带来许多便利,现在的人们不管是在学习或者是工作当中都是离不开网络的。在网络中,各大网页和网站也是我们浏览信息的主要渠道。如果想要更加高效率的工作和学习的话,当然也离不开网站浏览速度的支持...

告诉你导致网站页面打开速度慢的几种情况

导致网站页面打开速度慢的原因有很多,主要注意以下几个方面,就能做到很好的避免。...

浏览器变慢有救了!只要2秒,重回新安装一样爽快!

而最近有小伙伴在后台留言,说自己电脑浏览器用久了后,速度变得越来越慢了。特别是用久后,每次打开浏览器加载半天,经常白屏卡上那么一小会,体验上要比看这loging在转还难受,差点以为死机了。其...

导致网站打开慢的原因以及解决方法

是什么原因会导致网站打开慢?又有什么办法解决呢?一般来说,http请求过多、网页过大、服务器性能过差等等都可能导致网站打开慢。www.xy3000.com小蚁云安全乔妹为您分享一些参考解决方法:研究表...

还在为打开网页慢而苦恼吗?试试这招

不知道大家有没有这种感觉,家里网速明明很快,有20M,50M甚至100M,但不知道为什么打开网页,浏览页面的时候总感觉加载速度很慢。其实上网速度的快慢不仅仅取决于你家的宽带速度,也跟你的电脑硬件,系...

取消回复欢迎 发表评论: