this是javascript的一个关键字。
随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。
this 出现的场景分为四类,简单的说就是:
没调用对象就指向全局对象
有对象就指向调用对象
用new构造就指向新对象
通过 apply 或 call 或 bind 来改变 this 的所指。
这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。
代码如下:
var width = 200;
function test(){
var width = 1000;
console.log(this.width);
}
test();//200
2.作为对象方法的调用:指向所属对象
代码如下:
var width = 300;
function cs(){
console.log(this.width);
}
cs();//300
var test = {};
test.width = 200 ;
test.cs = cs;
test.cs();//200
第一次打印的时候,属于全局性调用。第二次的时候,属于作为对象方法的调用。
3.构造器中的 this:指向新对象
代码如下:
var test = function(){
this.val = 200;
}
var cs = new test();
console.log(cs.val);//200
4.情况四 apply调用
apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。
var x = 0;
function test(){
alert(this.x);
}
var o={};
o.x = 1;
o.m = test;
o.m.apply(); //0
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
如果把最后一行代码修改为
o.m.apply(o); //1