this
物件:視乎怎麼呼叫 Callback Function。
this
,很可能不是你所預期的對象。hero
物件,存在一些屬性,例如 name
,我想透過 Callback 的方式去控制 hero
物件,我只在 hero
物件裡實作一個 act()
,負責執行 Callback Function。而 Callback Function 的內容由其他人提供。例如以下:hero.act(sayHi)
就是一個 callback 的用法,sayHi
就是 callback function。hero.act()
裡,採用簡單呼叫的方式來執行 callback function。this
會是 Global 物件,所以 hero.act(sayHi)
回傳的結果是 Global 變數的 name
。this
會是 undefined
,無法執行 this.name
,會發生錯誤。hero.act(sayHi)
可以回傳物件 hero
自己的 name
值,我該怎麼做?this
,就要用 apply()
/ call()
。this
出現的位置有可能在:this
就是 Global 物件本身。this
不是看定義的語彙位置,而是根據執行當下誰擁有這段程式碼,也就是看誰呼叫的。undefined
null
,則視同「function()」)bind()
綁定而來的函數物件bind()
產生的函數,不管呼叫方式為何,this
都指向當初 bind()
所綁定的物件。this
不是變數this
介紹完整性的一個小補充。this
是一個關鍵字,不是變數,所以不能改變 this 的值,例如企圖這樣: