JavaScript的大魔王 — this!
每次上網看別人寫的JS總是霧煞煞,this到底是this還是this?
可以從以下幾個規則去推敲現在這個this到底指的是誰:
- 這個this寫在哪都沒差,誰呼叫了誰就是this,若沒有人呼叫(前面無小數點),this就會是global(若runtime為瀏覽器global就是window)
2. 有new的話,this會等於new物件本身
參考範例:https://github.com/lydiahallie/javascript-questions
3. 胖箭頭(flat arrow) () =>裡的this會攢到外面,胖箭頭沒有自己的this
4. 若使用嚴格模式可以使this不會亂竄
5. 可使用bind/apply/call改變this
bind(Arg1, Arg2, Arg3…)
//建立為新函式,並將bind的引數(Arg1)傳入成為this//
apply(Arg1, [Arg2, Arg3…] )
//接在方法後面,可傳入引數(Arg1)為this,若要多附加引數(y,z)需使用陣列形式//
call(Arg1, Arg2, Arg3…)
//和apply一樣,可傳入引數(Arg1)為this,差別只有多附加引數(y,z)可直接接在後面,不需轉為陣列//
apply 和 call的不同:
apply方法傳入方法傳入多個引數需使用陣列/call方法可直接傳入多個引數
下次看到this不會再霧煞煞啦~~~(•͈⌔•͈⑅)