this指向执行上下文时,总体有三种情况;
1.初始化全局上下文——指向window
2.进入eval模式
1)直接调用eval(),
this指向的执行上下文不会改变,指向当前执行环节
var obj = {
data:‘aoao‘,
seedata:function() {
eval(‘console.log(this.data)‘);
}
};
obj.seedata();
2)间接调用eval()
this永远指向window
var obj = {
data:‘aoao‘,
seedata:function() {
var ideal = eval;
ideal(‘console.log(this.data)‘);
}
}
obj.seedata();
3.function模式
一般有4种情况:
1)function ivocation pattern
直接调用函数foo();
此时可以把函数理解为window下的方法,this指向window;
2)method intvocation pattern
作为某一对象的方法调用函数
出现的特征是带有"."或者"[]"的符号
this指向这类符号前面的对象。例如foo.seedata();this指向foo;
3)constructor pattern
构造函数模式
this指向new构造器返回的对象;例如:var obj = new foo(arg);this指向obj;
4)apply pattern
使用了内置函数call和apply,形式foo.call(thisobject)或foo.apply(thisobject);
如果内置函数中的参数为null或者undifined,则this指向global,在浏览器内就是window对象;
对于apply的说明:Function.apply(obj,args)方法能接收两个参数:
(1)obj:这个对象将代替Function类里this对象;
(2)args:这个是数组,它将作为参数传给Function(args-->arguments);