先说this:this是JS中的一个关键字,它只能在函数体内部使用。他代表了这个函数运行时的环境对象,这句话听起来有些拗口,我们就简单理解它代表了一个JS对象 {}。
this的指向问题其实,一句话也基本能概括:谁调用的this指向谁,(箭头函数除外)。(“谁"代表的是"对象")。
我们改成另外一个对象去调用呢?
我们在实际工作中,可能会有多种this指向搞不清,主要有一下几种情况:
1,作为返回值时里面的this。
上述调用obj.a()实际返回的是个函数体。第二个执行相当于(function () {console.log(this) })();调用return匿名函数的实际上还是window。
2,构造函数中的this。
直接调用A,相当于window.A(),指向window。new A() 产生了一个新对象,new的作用之一就是把构造函数里面的this指向这个新对象。
3,函数作为参数时里面的this。
实际上b函数是window调用,a函数是由obj调用。
我们再分下实际具体情况:
1,定时器
定时器中的回调函数实际调用者是window。
2,DOM事件
btn的onclick属性是个函数。当事件触发的时候就是btn去调用这个onclick函数。所以this指向btn。
仔细想想可能谁调用this指向谁,这句话也可能不对,但是它确实解决了我工作中大部分的this指向问题。当然我们知道了this的指向,我们也要知道如何去改变this的指向。这个以后在说明吧!