簡單實例演示js中this/applay/call用法
點擊上方藍字關注「小鄭搞碼事」,每天都能學到知識,搞懂一個問題!
關於this指向問題,是我們經常遇到的,不太注意,又是特別重要的一個知識點,下面我們花點時間來簡略總結一下。
一、關於this
this是指調用當前函數的對象
doSomething在全局調用,相當於window.doSomething();所以裡面的this指向window對象,this.test就是window.test="Tony";
下面舉兩種閉包的例子來進一步看一下:
這個很好理解,object調用doSomething函數的時候返回的是一個函數,然後這個函數在全局環境下執行,裡面的this自然指向window對象。
下面在把上面那個例子變一下:
當object調用doSomething函數時,doSomething函數里的this按定義指向的就是調用它的函數object,通過指針賦值,傳到了返回的函數中,所以,最後abc.name的值就是My object。
順便說一聲,這種問題,箭頭函數已經很好的解決了,可能參考之前我寫的一篇文章。
二、關於call
改變this所指的對象
第一個調用,並沒有指明要改變指向的對象,所以在全局還是指向window,結果就是「Tony」。
第二個調用,改變this指向myobj對象,所以this.test就是TOM。
有了上面那個例子為基礎,理解這個例子也就很容易了,只需要注意調用call方法時是如何傳參數的。
三、關於Apply
與Call相比它的調用參數的形式不一樣
兩者的作用是一致的,唯一區別是apply接受的是數組參數,call接受的是連續參數。
寫在最後的總結:
以上是小鄭子個人理解,如有不對之處,歡迎補充和留言。
※想了解函數引用和函數調用本質區別的,這篇文章不要錯過
※關於js中的arguments,只需要搞懂這三點
TAG:小鄭搞碼事 |
※如何利用wpscan入侵WordPress-實例演示
※Magic Leap公布「Drive」和「Measure」兩個新Demo演示內容
※Twilio與Magic Leap首次現場演示Avatar Chat視頻聊天應用
※一覽Magic Leap One社交VR應用「Avatar Chat」演示效果
※《老滾5》Nvidia Freestyle模式演示 濾鏡下美炸天
※村上隆上身演示!UNIQLO x Doraemon x Murakami神秘單品曝光!
※一次詳細的Kerberoast攻擊演示
※微軟演示了Alexa和Cortana的集成
※AMD全新演示demo!Radeon FreeSync視覺體驗令人驚嘆
※育碧全新IP遊戲?《Roller Champions》演示視頻曝光
※Facebook、谷歌、Big Switch在開放硬體上演示網路操作系統
※Facebook F8演示4款Quest首發內容
※Facebook演示了VR頭顯原型機Half Dome的新特徵
※ACRONYM x Nike正式登場發布!更有visvim大神上身演示!
※微軟推Win10演示應用,盡現Surface Hub
※國產遊戲《惡果之地》Switch版演示 Roguelite激爽射擊
※PS4 RemotePlay實機演示 iPhone串流暢玩PS4獨佔
※中國5G競速:first call僅僅是開始,eMBB演示見真章
※還挺方便,微軟演示 Alexa和Cortana 的整合
※AMD展示FreeSync 2 HDR測試工具「Oasis」的演示Demo