1. 程式人生 > >js重點--this關鍵字

js重點--this關鍵字

需要 ack get 局部變量 func window this指向 關鍵字 rip

推薦博客:https://www.cnblogs.com/huaxili/p/5407559.html

this是JavaScript的一個關鍵字,表示的不是對象本身,而是指被調用的上文。

主要用於以下四種環境:

1.直接調用,表示的是全局對象,window

2.作為對象方法被調用,表示的是該對象

3.作為構造函數被調用,表示的是創建的實例

4.可以使用apply(),call()改變this的表示對象,第一個參數就是this

直接調用,表示的是全局對象,window

        var count = 1;
        function func(){
            console.log(
this.count); } func(); //1

調用函數的結果是1,即this指的是全局對象,window,所以count值為全局變量的值

作為對象方法被調用,表示的是該對象

var count = 1; function func(){ console.log(this.count); }
var obj = {}; obj.count = 2; obj.show = func;
obj.show(); //2

func()方法作為對象的方法被調用,此時this表示的被調用的對象obj,所以count值為obj對象中的值count,若是對象obj中沒有count屬性,則為undefined

作為構造函數被調用,表示的是創建的實例

        var count = 1;
        function func(){
            this.count = 2;
        }

        var Func = new func();
        console.log(count);             //1
        console.log(Func.count);     //2    

func()作為構造函數,創建了他的實例,此時this表示的是創建的實例Func

可以使用apply(),call()改變this的表示對象,第一個參數就是this

apply()是函數對象的一個方法,它的作用是改變函數的調用對象(實則是將某某對象的某個方法放到另一個好基友對象那裏去執行),它的第一個參數就表示改變後的調用這個函數的對象。因此,this指的就是這第一個參數。同call()

        var count = 1;
        function func(){
            console.log(this.count);
        }

        var obj = {};
        obj.count = 2;
        
        func.call();        //1 
        func.call(obj);     //2

可以使用apply()或是call()來改變this指向。此時this表示的是obj對象

嵌套函數作用域中的this

        var count = 1;
        function func(){
            console.log(this.count);

            function func2(){
                console.log(this.count);
            }

            func2();
        }

        var obj = {};
        obj.count = 2;
        obj.show = func;

        obj.show();     //2,1

嵌套函數被調用時並沒有繼承被嵌套函數的this引用,在嵌套函數被調用時,this指向全局對象。在有些應用中,我們需要在嵌套函數中讀取調用被嵌套函數的對象的屬性,此時可以聲明一個局部變量保存this引用,

        var count = 1;
        function func(){
            console.log(this.count);

            var self = this;
            function func2(){
                console.log(self.count);
            }

            func2();
        }

        var obj = {};
        obj.count = 2;
        obj.show = func;

        obj.show();     //2,2

此時,嵌套函數與被嵌套函數中的this都表示了obj對象。

js重點--this關鍵字