1、this使用方法:
this指的是当前函数的对象。通过下面的demo简单说明一下:
function doSomething(){
alert(this);
}
doSomething();
我是在firefox里面调试的,所以返回的结果是[Object Window]。
那么这个 [Object Window], 到底是什么呢?看看下面的代码
function doSomething(){
alert(this===window);
}
doSomething();
看到弹出了true, 也就是说在这种正常情况下,this其实就是window
所以,我们定义了一个全局的变量的时候,可以
var test="Tony";
也可以
window["test"]="Tony";
下面这个例子,进一步说明,正常情况下,函数里的this就是window
var test="Tony";
function doSomething(){
alert(this.test); //弹出 "Tony";
alert(window.test); //弹出 "Tony";
}
doSomething();
通过以上demo,我们可以看出this是指doSomething()所在的对象。即this.test=windo.test;
2、闭包中的this
(function(window){
var name ="The Window"; //创建了一个全局变量name
var object = { //又创建了一个对象(创建对象的方法有很多种)
name:"My Object", //创建了一个name属性(属性就是引用非函数)
doSomething:function(){ //创建了一个doSomething方法(方法就是引用了函数)
return function(){ //这个doSomething方法返回一个匿名函数
return this.name; //这个匿名函数又返回this.name
};
}
};
alert(object.doSomething()()); //由于这个doSomething方法返回的一个函数,所以这样就可以调用这个函数了
})(window)
这段代码返回的结果是"The Window",而不是我所预期的"My Object",前面不是说了吗?this指的是当前函数的对象, 可是在这里为什么就不是呢?其实就是因为闭包的特性,由于这个匿名函数构成了一个闭包,所以他所保存的就是整个变量对象也就是Window对象。
那么如何做才能让结果返回"My Object"呢?还是那句话this指的是当前函数的对象,那么问题就简单了,也就是让this放在doSomething方法里,而不是那个匿名函数里不就可以了吗?修改代码如下:
var name ="The Window";
var object = {
name:"My Object",
doSomething:function(){
var abc = this ;
return function(){
return abc.name;
};
}
};
alert(object.doSomething()());
现在再看代码红色部分做的修改,this是不是指的是当前doSomething()函数的object对象了?那再输出结果自然就是"My Object"了