this在js中主要有四种用法:
1、作为普通函数使用
2、作为对象方法来使用
3、call和apply
4、作为构造函数来使用
1、作为普通函数使用
function funcA() {
this.name = "hello";
console.log(this.name);
this.show = function() {
console.log(this.name);
}
}
funcA();// 1、hello
2、作为对象方法来使用
var obj={name:"hello",show:function(){
console.log(this.name);
}};
obj.show();
这个很简单,this指向自己,所以this.name就用hello;
(在全局里面this指向window,在某个对象里面this指向该对象,在闭包里面this指向window)
var user="the Window";
var box={
user:‘the box‘,
getThis:function(){
return this.user;
},
getThis2:function(){
return function (){
return this.user;
}
}
};
alert(this.user);//the Window
alert(box.getThis());//the box
alert(box.getThis2()());
//the Window (由于使用了闭包,这里的this指向window)
alert(box.getThis2().call(box));
//the box 对象冒充(这里的this指向box对象)
3、call和apply
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
4、作为构造函数来使用
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