1. 程式人生 > >this指向 - 總結

this指向 - 總結

undefined 函數 依據 color strong 什麽 塊對象 環境 call

/*
總結:

this 的指向:

    1.this 的指向 是在執行上下文時才確定的, 並且確定後不可更改;

    2.this 指向 “其執行上下文的環境對象”; 

“其執行上下文的環境對象” 判讀依據如下:
*/
/*
瀏覽器環境下:

    嚴格模式下:

        1.全局上下文中的 this

            “其執行上下文的環境對象”為,全局執行上下文的環境對象,而全局執行上下文的環境對象 為 Window對象;

        2.函數上下文中的 this

            情景一:apply、call、bind 指定環境對象

                “其執行上下文的環境對象”為,被指定的環境對象,無論是什麽,即使是 null 或者 undefined;
            
            情景二:沒有指定環境對象

                ->1.作為 獨立函數 執行

                    “其執行上下文的環境對象”為 undefined;
            
                ->2.作為 對象方法 執行
                
                    “其執行上下文的環境對象”為 這個擁有它的對象;

        3.對象屬性中的 this

            “其執行上下文的環境對象”為,全局執行上下文的環境對象 為 Window對象;

        4.構造函數 和 原型方法中的 this

            構造函數中:

                “其執行上下文的環境對象”為,以構造函數名命名的新對象;

            原型方法中:

                “其執行上下文的環境對象”為,構造函數的原型對象;

    非嚴格模式下:
1.全局上下文中的 this (同 嚴格模式) 2.函數上下文中的 this 情景一:apply、call、bind 指定環境對象 (同 嚴格模式) 情景二:沒有指定環境對象 ->1.作為 獨立函數 執行 “其執行上下文的環境對象”為 Window對象; ->2.作為 對象方法 執行 (同 嚴格模式) 3.對象屬性中的 this (同 嚴格模式) 4.構造函數 和 原型方法中的 this 構造函數中: (同 嚴格模式) 原型方法中: (同 嚴格模式)
*/ /* Node環境下: 嚴格模式下: 1.全局上下文中的 this “其執行上下文的環境對象”為,全局執行上下文的環境對象 當前模塊{},所以全局中 this 指向當前模塊對象{}; 2.函數上下文中的 this 情景一:apply、call、bind 指定環境對象 “其執行上下文的環境對象”為,被指定的環境對象,無論是什麽,即使是 null 或者 undefined; 情景二:沒有指定環境對象 ->1.作為 獨立函數 執行 “其執行上下文的環境對象”為 undefined; ->2.作為 對象方法 執行 “其執行上下文的環境對象”為 這個擁有它的對象; 3.對象屬性中的 this “其執行上下文的環境對象”為,全局執行上下文的環境對象 當前模塊{},所以全局中 this 指向當前模塊對象{}; 4.構造函數 和 原型方法中的 this 構造函數中: “其執行上下文的環境對象”為,以構造函數名命名的新對象; 原型方法中: “其執行上下文的環境對象”為,構造函數的原型對象; 非嚴格模式下
: 1.全局上下文中的 this (同 嚴格模式) 2.函數上下文中的 this 情景一:apply、call、bind 指定環境對象 (同 嚴格模式) 情景二:沒有指定環境對象 ->1.作為 獨立函數 執行 “其執行上下文的環境對象”為 global對象; ->2.作為 對象方法 執行 (同 嚴格模式) 3.對象屬性中的 this (同 嚴格模式) 4.構造函數 和 原型方法中的 this 構造函數中: (同 嚴格模式) 原型方法中: (同 嚴格模式)
*/ /* 可以看出,瀏覽器環境 和 Node環境中主要的不同就是,全局執行上下文的環境對象 瀏覽器中:全局執行上下文的環境對象 為 Window對象,在 非嚴格模式下,如果沒有指定環境對象 或 環境對象為 null 或 undefined, this指向會轉為 Window對象; Node中:全局執行上下文的環境對象 為 當前模塊對象{},在 非嚴格模式下,如果沒有指定環境對象 或 環境對象為 null 或 undefined, this指向會轉為 global對象; */

this指向 - 總結