this代表他的直接呼叫者,例如obj.func,那麼func的this就是obj
在預設情況下(非嚴格模式),沒直接找到呼叫者,則this指的是window
在嚴格模式下,沒有直接呼叫者的函式中的this是 undefined
結果為window
匿名函式,say函式沒有預設的宿主物件,所以預設this指向window
如何使用這個物件的引用?
用乙個 變數提前把正確的 this引用儲存 起來, 我們通常使用that = this, 或者 _this = this來儲存我們需要的this指標!
結果為obj
輸出 2 4 8 8window.val = 1;
var obj =
};obj.dbl();
var func = obj.dbl;
func();
<1> 12行**呼叫
val變數在沒有指定物件字首,預設從函式中找,找不到則從window中找全域性變數
即 val *=2 就是 window.val *= 2
this.val預設指的是 obj.val ;因為 dbl()第一次被obj直接呼叫
<2>14行**呼叫
func() 沒有任何字首,類似於全域性函式,即 window.func呼叫,所以
第二次呼叫的時候, this指的是window, val指的是window.val
第二次的結果受第一次的影響
結果是:undefined
此時的this是定義它的物件,即繼承父級的this,obj呼叫了say()方法,故父級中的this指的是obj,而非window
結果:都是obj
f1繼承父級this指代的obj,不管f1有多層箭頭函式巢狀,都是obj.
結果:window,window
第乙個this:f1呼叫時沒有宿主物件,預設是window
第二個this:繼承父級的this,父級的this指代的是window.父級為say(),this指代的是window
ES6中箭頭函式的作用
那為什麼在es6中引入了箭頭函式呢?最主要的目的就是解決this指標的問題。我們知道在es6中,我們可以建立乙個class,如果我們預設在其裡面加入乙個函式的話,其必須在呼叫的時候,必須繫結this指標,否則不能訪問當前類的例項裡面的屬性。下面舉乙個具體的例子,為什麼其能解決this指標的問題。比如...
ES6中箭頭函式中的this指向
箭頭函式的this指向與一般的function函式定義不同 箭頭函式的this定義 是在定義函式的時候繫結,而不是在執行的時候繫結 何為執行時繫結 來看下面的例子 let a 1 let obj obj.sayhi 輸出的是2一般的定義函式執行的時候決定this的執行,我們不難看出obj.say 的...
ES6中箭頭函式this指向的問題
箭頭函式在es6中用的很常見,剛開始我還覺得這有什麼,就是簡寫了一下而已 後來用習慣之後就覺得是真滴方便 在說之前先簡單的概括一下。箭頭函式和普通函式的區別如下。普通函式 根據呼叫我的人 誰呼叫我,我的this就指向誰 箭頭函式 根據所在的環境 我再哪個環境中,this就指向誰 先來看乙個簡單的例子...