JS的this指向
关于this指向的问题,之前都是只记住,普通函数谁调用,就指向谁,而箭头函数定义在哪个作用域下,this就指向谁。
但是似乎这样理解有点浅显。
所以我就傻乎乎的,只记住这一点就去面试了,所以面试官出了这道题,我就GG了。
var o = {
v:'hello',
p:['a1','a2'],
f:function f(){
this.p.forEach(function(item){
console.log(this.v+' '+item);
console.log('f中的this为:'+this)
} )
}
}
o.f()
我的回答是:
hello a1
hello a2
但是实际上是:
undefined a1
undefined a2
我之前的理解是,o.f(),那就是对象o进行调用,那么函数f中的this就是指向o,所以我继续猜想,如果函数里面再定义函数,那么这个内部函数的this也可能是指向这个对象o,所以导致出错。
所以我发布了这个问答:https://segmentfault.com/q/10...
然后解决了我这个疑惑。所以this指向其实记住以下原则就可以了。
(1)普通函数this指向是不能确定的,谁调用,this指向谁;至于没有谁调用的,那么在严格模式下,this就默认指向undefined;在非严格模式下就默认指向全局对象;
(2)箭头函数,在哪个地方定义,它就指向哪个对象;
(3)类本质也是函数,里面的this都是严格模式下的this,所以直接获取this是会返回undefined的,而使用实例获取this,这个this指向的就是实例
对应(3)的例子:
class car{
getThis(){
return this;
}
}
console.log(car.getThis)
var c1 = new car();
console.log(c1.getThis)
console.log(typeofc1.getThis)
【JS的this指向】
文章图片
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量