本来以为this很简单 无非是这样


后来经过仔细研究,总结了一下某些this指向的问题,让思路更加清晰
总的来说函数的调用有两个方法
func()/window.func()
func.call(ojb)
其实obj.func()也是跟func()这种调用是一样的 只不过func()前面省略了window,全写完就是window.func() 当我们用第二种方法去调用函数的时候 this的指向就非常清晰了
func.call(obj)
里面的this就是obj 传什么进去this就指向什么,obj可能是对象,其实也有可能是对象,函数,甚至是字符串,数字,字符串数字在js里面其实也可以算个对象,万物皆对象,虽然直接不可用给string或者number加属性,但是给原型加了之后string和number是依然可以用的,举个栗子


言归正传.用这样子去调用函数的话 this的指向可谓是非常清晰,假如是a.b.c(),那么改成call的写法,就是a.b.c.call(a.b),那么this就是指向a.b,哇 简直是简单粗暴,那么问题就来了


所以 this的指向就是call的第一个参数.
ppps:(此规则暂不适用于一些奇怪的东西,比如new出来的情况,如果箭头函数的话还得仔细找上下文的this)