js this指向问题
this 指向问题
箭头函数默认指向上下文对象,如果没有上下文对象,则指向window。
箭头函数this指向是静态的,call、apply、bind方法也无法改变其指向。
回顾:bind只改变this指向,不调用;call,apply改变之后再调用,call=>[],apply=>{}
以下是一些例子。
基础引入
1 | function a(){ |
猜猜这个打印出什么?
答案是window
为什么呢?因为全局的方法会被挂载到window上,相当于window.a()
无箭头函数
1 | const obj = { |
可以看到打印的是obj2,因为func2的调用者是obj
总结:指向上一个调用者
有箭头函数
情况一
1 | const obj = { |
可以看到打印结果是obj,func2是箭头函数,this指向上下文的this,即obj2的this,obj2的this指向obj,所以最终this指向obj
情况二
1 | const obj = { |
可以看到打印结果是window,
首先fun2是箭头函数,无直接调用者this等于它的上下文的this,即obj2的this,
又因为obj2在箭头函数内,所以其this=箭头函数的this,
因为func是箭头函数,它的this=它上下文的this,即obj的this,
obj的this指向window,所以最终打印window
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 bler's blog!
评论