一.函数调用
// this 指代全局对象(window)
function test(){
this.x = 1;
alert(this.x);
}
test(); // 1
二.方法调用
// 作为对象方法调用,this 指代上级对象
function test(){
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1
三.构造函数模式
// this指向new创建的新对象
function test(){
this.x = 1;
}
var o = new test();
alert(o.x); // 1
// 运行结果为1。为了说明这时this不是全局对象,看下面的代码:
var x = 2;
function test(){
this.x = 1;
}
var o = new test();
alert(x); //2
四.apply/call调用(函数上下文)
上下文模式中this的指向和前三种模式不一样,它的this指向可以改变,而前三种模式是固定。
apply和call第一个参数:表示使用那个对象来调用函数;
apply第二个参数:是一个数组或伪数组,数组的值做为函数的参数被传入;
call第二个参数是:是基本数据类型(number string boolean);
var x = 0;
function test(){
alert(this.x);
}
var o={};
o.x = 1;
o.m = test;
o.m.apply(); //0 指向window
//apply()的参数为空时,默认调用全局对象。如果把最后一行代码修改为:
o.m.apply(o); //1 指向o对象
通过call和apply可以重新定义函数的执行环境,即this的指向,这对于一些应用当中是十分常用的。