this
本身含义:执行上下文(只能是对象 不是对象强行转换成对象)
this一般存在于函数中,表示当前函数的执行上下文,如果函数没有被执行,那么this没有内容,只有函数在执行后this才有绑定。
函数执行的位置:
1、默认执行:
(自己执行自己)fn() (默认情况下的隐式执行) this指向window (严格模式下指向undefined,不指向)window
var arr = [1,2,3];
function fn(){
console.log(this)
}
fn();
2、通过对象执行:
(通过上下文对象执行,隐式执行,会发生隐式丢失):obj.fn()
3、显示执行:
(函数的方法执行)
//eg
function fn(){
console.log(this.a)
}
var a = 10;
var obj = {
a : 20,
b : fn,
}
obj.b();// 返回值20;this指向的是fn引用的地址
//fn作为一个函数本身是一个对象,在内存中所占据的空间依然是一个地址,
//在用obj.b(),执行这个函数时执行的是一个引用,函数本身就是一个引用,
//当把fn复制给obj中的b时,复制的是一个引用地址=》浅拷贝,当我早使用obj.b()
//执行函数,用obj找到那个引用位置,这个时候,函数引用的位置被obj所找到,被obj
//执行,那么此时函数里的this就指向找到我位置的那个对象,也就是fn被哪个对象所
//执行,此时,fn就指向谁
this指向是调用当前函数的直接对象
显示执行:
(通过函数的方法执行)
指定的是谁this就指向谁,后天强制的,可以解决隐式丢失,找回丢失的this,使用显示执行强行绑定
//eg
function fn(){
var f = fn.bind(window(写谁this就是谁));
}
f(); //此时就是window
构造函数执行 》》》》》》》》》》》》》》》》》
总结:谁执行了this所在的函数,this就是谁(重点)
(后天操作,就是改变了this的指向)