JS中的this
1|0this
this
关键字是函数运行时自动生成的一个内部对象,只能在函数内部使用,总指向调用它的对象
this
在函数执行过程中,this
一旦被确定了,就不可以再更改
1|1绑定规则:
根据不同的使用场合,this
有不同的值,主要分为下面几种情况:
-
默认绑定
-
隐式绑定
-
new绑定
-
显示绑定
默认绑定
原因是调用函数的对象在游览器中位window
,因此this
指向window
注意:
严格模式下,不能将全局对象用于默认绑定,this会绑定到undefined
,只有函数运行在非严格模式下,默认绑定才能绑定到全局对象
隐式绑定
函数还可以作为某个对象的方法调用,这时this
就指这个上级对象
new绑定
通过构建函数new
关键字生成一个实例对象,此时this
指向这个实例对象
显示修改
apply()、call()、bind()
是函数的一个方法,作用是改变函数的调用对象。
作用
改变函数执行时的上下文,简而言之就是改变函数运行时的this
指向
什么情况下需要改变this
的指向呢?下面举个例子
从上面可以看到,正常情况say
方法输出martin
但是我们把say
放在setTimeout
方法中,在定时器中是作为回调函数来执行的,因此回到主栈执行时是在全局执行上下文的环境中执行的,这时候this
指向window
,所以输出lucy
区别
apply(this指向谁,参数(以数组的形式)) 立即执行 临时改变指向一次
apply
接受两个参数,第一个参数是this
的指向,第二个参数是函数接受的参数,以数组的形式传入
改变this
指向后原函数会立即执行,且此方法只是临时改变this
指向一次
call(this指向谁,参数列表) 立即执行 临时改变指向一次
call
方法的第一个参数也是this
的指向,后面传入的是一个参数列表
apply
一样,改变this
指向后原函数会立即执行,且此方法只是临时改变this
指向一次
bind(this指向谁,参数列表(多次传入)) 立即执行 永久改变
bind方法和call很相似,第一参数也是this
的指向,后面传入的也是一个参数列表(但是这个参数列表可以分多次传入)
改变this
指向后不会立即执行,而是返回一个永久改变this
指向的函数
三者区别
相同点:
- 都能改变this的指向,
- 三者第一个参数都是
this
要指向的对象,如果如果没有这个参数或参数为undefined
或null
,则默认指向全局window
- 都可以传入参数
不同点:
apply
是数组,而call
是参数列表,且apply
和call
是一次性传入参数,而bind
可以分为多次传入bind
是返回绑定this之后的函数,apply
、call
则是立即执行
优先级
new绑定优先级 > 显示绑定优先级 > 隐式绑定优先级 > 默认绑定优先级
__EOF__

本文链接:https://www.cnblogs.com/jingxin01/p/16407880.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)