1、谁最终调用函数,this最终指向谁(记住!)
①this指向谁,不应考虑函数在哪声明,而应该考虑函数在哪调用!!!
②this指向的永远只可能是对象,而不可能是函数。
③this指向的对象,叫做函数的上下文context,也叫函数的调用者。
2、this指向的规律!!!(跟函数的调用方式息息相关,记住这点,相信你一定会分清this指向哒)
①通过函数名()调用的,this永远指向window
②通过对象.方法调用的,this指向这个对象。
③函数作为数组中的一个元素,用数组下标调用的,this指向这个数组
④函数作为window内置函数的回调函数使用,this指向window。
setInterval setTimeout 等。
⑤函数作为构造函数,使用new关键字调用,this指向新new出的对象。
下面的例子能让你对this的指向更加清楚:
var fullname = 'John Doe';
var obj = {
fullname: 'Colin Ihrig',
prop: {
fullname: 'Aurelio De Rosa',
getFullname: function() {
return this.fullname;
}
}
};
console.log(obj.prop.getFullname());
// 函数的最终调用者 obj.prop Aurelio De Rosa
var test = obj.prop.getFullname;
console.log(test());
// 函数的最终调用者 test() this-> window John Doe
obj.func = obj.prop.getFullname;
console.log(obj.func());
// 函数最终调用者是obj Colin Ihrig
var arr = [obj.prop.getFullname,1,2];
arr.fullname = "JiangHao";
console.log(arr[0]());
// 函数最终调用者数组 JiangHao
改变this指向
使用call、apply、bind都可以改变函数调用的this指向, 关于他们的区别和使用, 请参考添
call、apply、bind的区别, 一目了然