this指向 - 總結
阿新 • • 發佈:2018-04-23
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指向 - 總結