this是JS的关键字,随着函数使用场合的不同,this值会发生变化。但总的原则是,this总是指向调用this所在函数的那个对象。
1、纯函数调用
function test(){ this.x=1; alert(x); } test();
这里的this就是全局变量。看下面的例子就能很好的理解this就是全局对象Global。
var x=1; function test(){ alert(this.x); } test(); //1 var x=1; function test(){ this.x=0; } test(); alert(x); //0
在JavaScript的变量作用域中规定,“全局变量都是window对象的属性。”因此执行test()时相当于window.test(),此时test函数体内的this关键字的指向变成了window对象。即将window对象的x变为0。
var x=1; var b={ x:2, getX:function(){ return this.x; } }; alert(this.x); //1 alert(b.getX()); //2
在上面的代码中,alert(this.x)中this指向window,所以在全局中搜寻x的值,为1;
alert(b.getX())中由于x所在函数作为对象b的方法被调用,this指向了b,因此在b中搜寻x的值,为2。
2、作为方法调用,那么this指调用方法的这个对象。
function test(){ alert(this.x); } var o={}; o.x=1; o.m=test; o.m(); //1
3、作为构造函数调用。此时this指向新生成的对象。
function Test(){ this.x=1; } var o= new Test(); alert(o.x); //1
4、apply调用。this指向的是apply中的第一个参数。
var x=0; function test(){ alert(this.x); } var 0={}; o.x=1; o.m=test(); o.m.apply(); //0 o.m.apply(o);//1
当apply没有参数时,表示为全局对象。所以值为0。
原文:http://www.cnblogs.com/haidaojiege/p/6971765.html