this参数的指向不仅是由定义函数的方式和位置决定的,同时还严重受到函数调用方式的影响。我们接下来讨论不同调用方式对this的影响。
1.作为一个函数调用
在非严格模式下,this是全局上下文(window对象)
在严格模式下,this是undefined
2.作为方法调用
当函数作为某个对象的方法被调用时,该对象会成为函数的上下文,并且在函数内部可以通过参数访问到
3.作为构造函数调用
新的空对象被设置为该函数的上下文(this)
4.apply/call
显示指定任何对象作为函数的上下文
5.箭头函数中this
箭头函数中的this是在定义函数时绑定的,不是在执行过程中绑定的,简单的说,函数在定义时,this就继承了定义函数时的对象。
1.作为函数直接被调用
function ninja(){
return this;
}
function samurai(){
"use strict";
return this;;
}
ninja() === window; //true
samurai() === undefined; //true
2.作为方法被调用
function whatsMyContext(){
return this;
}
//在对象中定义方法
var ninja1 = {
getThis:whatsMyContext
}
var ninja2 = {
get2This:whatsMyContext
}
ninja1.getThis() ===ninja1; //true
ninja2.get2Th