JS觀念篇-call, apply, bind
前言
今天要介紹的 JS 觀念是 call, apply 和 bind 三個 function
這些我目前為止都沒用過
因為在過去的專案中,幾乎沒用到 OOP (Object Oriented Programming)
class 也沒用過
自然就沒遇到適合的使用情境
但有時還是會在一些教學影片看到他們的身影
(即使那不是影片主題)
我就覺得應該要來補一下
this 簡介
this
是在 javascript 中的重要語法
他指向的是函式被調用的位置
如果是物件調用函式,
this
就是那個物件
在瀏覽器中直接印this
,就是window
物件
在node.js直接印this
,就是global
物件
在嚴格模式中直接印this
,就是undefined
如果我們想為物件打造一個 function
就可以在函式中用上this
1 | const newFriend = {name: 'Josie'} |
這時突然發現物件沒有進入點
解決方法可以把 greeting 定義在物件裡面
或是物件之上如果有一個類別的話
也可以定義在prototype裡面
但我們也可以改用 call, apply, bind 來呼叫函式
接下來就來一一介紹
call
call 的功能是執行函式,並指定函式中的this
是誰
1 | // function.call(object, arg1, arg2, arg3, ...) |
apply
基本上跟 call 做一樣的事情
但提供另一個傳入引數 (argument) 的方式
改成傳入包含所有引數的陣列
1 | // function.apply(object, [arg1, arg2, arg3, ...]) |
bind
將函式中的 this 綁定給某個對象,然後回傳一個新的函式供使用
1 | // function.bind(object) |
結論
call
和apply
: 執行函式並指定this
所指對象bind
: 回傳一個新函式,是原函式與this
所指對象綁定的版本
基本上除非函式中包含this
否則不太會用到這三個函式