3.2_this的應用
透過在各種不同的情況下來運用this,來了解this會隨著不同的物件呼叫函式而不同。及如何指定this的各種方法。
this等於DOMWindow
本課目地在於,在各種情況下,this的值會為何?
首先,先測試在<sciprt></script>之內時的this

在console檢測,this等於DOMWindow

在閉包中測式this

在console檢測,this一樣等於DOMWindow

this等於<a></a>
點選連結,執行的函式doSomething(),this會等於?

運行結果,點選連結,卻跑到預設的連結網頁了

將預設連結網頁的動作取消

在console檢測,解說點按的event包含的參數

回到最初的this議題

在console檢測,點選連結,所執行的函式,this等於所點選的連結<a href="http://tutsplus.com">Click Me</a>

解說當你在執行函式時,想想想呼叫此函式的是那一層,以判斷其this為何

this等於obj
將函式包函在物件中,測測this 會是誰

點選連結,在console檢測,this依然等於<a href="http://tutsplus.com">Click Me</a>

此時click後所接的函式是function(e),而不是obj.doIt(),所以obj.doIt內的this 會是obj

點選連結,在console檢測,this為object型態的obj

指定this為特定物件
如果你希望obj.doIt()所指的this仍是<a href="http://tutsplus.com">Click Me</a>,該如何做?你可以運用call()的方法來達成

運行結果,在console檢測,成功運用call()來指定this為<a href="http://tutsplus.com">Click Me</a>

除了用call()以外,也可用apply()

用$.proxy(obj.doIt,obj)也可指定該函式的this是誰

運行結果,在console檢測,成功使用$.proxy()設定this為obj

結論,指定this時,可用javascript的方法,call(()或apply(),或是使用jquery的方法$.proxy()
