javascript中的this用法

來源:互聯網
上載者:User

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

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.