js中的墙头草---this
生活随笔
收集整理的這篇文章主要介紹了
js中的墙头草---this
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? 在Java中,this永遠都是‘忠貞’地指向當前類的實例。而在javascript中,this就沒有“忠貞”了,this會隨著執行環境的變化而變化,也就是說this永遠執行執行環境所在的對象。
直接上代碼:
代碼一:
function?test(){alert(this?==?window)? } test()???通過運行代碼發現結果為true,這是因為test方法的調用時在window環境,所以this指向了window。
接著看:
? 使用對象字面量定義屬性和方法,如下:
var?obj?=?{property?:?"obj",fun?:?function(){alert(this?==?window);alert(this?==?obj);} } obj.fun();運行下代碼,結果為false,true。是什么原因捏?原因其實很簡單,就是fun方法是通過obj對象調用的,所以this就指向了obj對象。
有什么問題嗎?木有,`(*∩_∩*)′。咱們繼續啊!
我們知道在一個方法中還可以返回一個新的方法,形式如下:
?var?obj?=?{property?:?"obj",fun?:?function(){return?function(){alert(this?==?obj);alert(this?==?window);}} } obj.fun()()?我們把上面的代碼稍稍改編了下,在fun方法中重新返回了一個方法。結果是怎么樣?你猜到結果了嗎? 正確的結果是false,true。我們來分析下,使用?obj.fun()返回的是一個方法,這時候是在全局環境中(window),所以this就指向了window。明白了吧。?????????????????????????????????????????到這里你是不是對js中的this有了大概的了解呢,稍等,還有一種情況,就是通過call和apply方法動態改變this的指向。 我們在這里只演示一個call的例子。function?test(){alert(this?==?window)?alert(this?==?obj); } var?obj?=?{}; test.call(obj,null);我們繼續使用第一個例子。我們定義了一個空對象obj,我們的目的是想把test方法作為obj的一個方法來執行。大家可以執行下看看結果,看看結果是不是和第一個例子的結果不一致??????????????????? 好了,今天暫時介紹到這里,排版暫時有問以后改下,不影響結果。 有問題請留言,謝謝!轉載于:https://blog.51cto.com/hcc0926/1562179
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的js中的墙头草---this的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PLSQL_性能优化系列07_Oracl
- 下一篇: 关于vs2012、tfs2012、win