JavaScript筆記1--this的含義

this的含義

由於JavaScript 有運行期綁定的特性,JavaScript 中的 this 含義不是固定的,它可以是全局對象、當前對象或者任意其他對象,這完全取決於函數的調用方式。

隨着函數使用場合的不同,this的值會發生變化。但是有一個總的原則,那就是this指的是,調用函數的那個對象。

(1)在函數被直接調用時,this綁定到全局對象。在瀏覽器中,window 就是該全局對象。
(2)函數作爲構造函數被調用,就是通過這個函數new一個新對象。這時this就指這個新的對象。

<script>
    function F1(){
        var name = "GD";
        console.log("測試:"+this.name);
    }

    function Test(){
        //函數直接被調用
        //this = window,this.name="",因爲沒有給window指定name啊;
        F1();

        //函數作爲構造函數被調用
        //this = object,this.name = "",因爲var定義的name變量和this.name不是同一個變量,只是名稱相同而已;
        var f = new F1();
    }
</script>

(3)函數作爲內部函數被調用,this不是其父函數,仍然是全局變量。

<script>
    function F1(){
        console.log("測試1:"+this);
        function innerTest(){
            console.log("測試2:"+this);
        }
        return innerTest;
    }

    function Test(){
        var inner = F1();
        //內部函數innerTest裏面的this = window
        inner();    
    }
</script> 

(4)函數作爲某對象的方法被調用,裏面的this指當前對象。在 JavaScript 中函數也是對象。因此函數可以作爲一個對象的屬性。

<script>
function Test(){
    var obj1 = {
        name: 'Byron',
        fn : function(){
            console.log(this);
        }
    };

    //函數作爲對象方法,裏面的this = 當前對象
    obj1.fn();

    //函數作爲對象方法,如果單獨調用,裏面的this = window
    var fn2 = obj1.fn;
    fn2();  
}
</script>

總而言之,隨着函數使用場合的不同,this的值會發生變化。但是有一個總的原則,那就是this指的是,調用函數的那個對象。

發佈了38 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章