现在的位置: 首页 > 综合 > 正文

javascript中的this用法

2013年06月07日 ⁄ 综合 ⁄ 共 1853字 ⁄ 字号 评论关闭

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"了

 

 

抱歉!评论已关闭.