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指向】JS的this指向
文章图片

    推荐阅读