最近很多 Javascript初學者朋友總在問: Javascript 的this 關鍵字的用法。我在這裏索性總結一下 this關鍵字的用法。
this 關鍵字是面向對象編程語言中的一個重要概念!在JAVA,C,C#,C++等語言中,this 總是指向當前的運行對象。但是在 Javascript ,由於javascript的動態性以及詞法作用域特性,this的指向在運行時才確定。
this 關鍵字的用法其實比較複雜,不過你只要牢記一句話就可以:
“this 變量:永遠指向函數運行時所在的對象,而不是函數被創建時所在的對象。
如果處在匿名函數中、或者不處於任何對象中,this 都指向宿主的根對象(在瀏覽器裏面就是 window)”
另外,javascript中還用 call() 和 apply() 來調用函數,再記住下面這兩句話:
如果是call()、apply()、with(),指定的this是誰,就是誰 !
普通的函數調用,函數被誰調用,this就是誰。
(忽然想起:ECMAScript 5 的嚴格模式中,嚴禁使用 with() 函數,並且ECMAScript 3 中並不推薦使用 with())
上面的舉例還是太過複雜,不太科學。我舉一個更加直白的說明:Javascript 的 this 很花心,在哪個對象的家裏,就是那個對象的。
而 C,C++,C# 的 this 很專一,無論在哪,都屬於原配!
並且 Javascript 的函數作用域 則像出生地,出生在哪裏,出生地就是哪裏!和運行環境無關!(此處可參照《Javascript權威指南第六版》第8章!不過貌似只有淘寶前端翻譯的紙質版本,人民幣139大洋!這裏有一個《Javascript權威指南第四版》,湊和着看吧。)
大致就這樣吧,有問題,請留言。