this 指向(!重要!重要!重要) |
+ 是一個 關鍵字 |
+ 是一個 使用在 作用域内的 關鍵字 |
=> 要麼使用在全局 |
=> 要麼使用在函數内部 |
在函數内使用 this 關鍵字(熟讀并背誦全文) |
+ **和函數的定義方式沒有關系, 和函數在哪定義沒有關系, 隻看函數怎麼調用(箭頭函數除外)** |
1. 普通調用(全局調用) |
=> 書寫: 函數名() |
=> 該函數内的 this 指向 window |
2. 對象調用 |
=> 書寫: xxx.函數名() |
=> 該函數内的 this 指向, 點前面是誰就是誰 |
3. 定時器處理函數 |
=> 書寫: |
-> setInterval(函數, 數字) |
-> settimeout(函數, 數字) |
=> 該函數内的 this 指向 window |
4. 事件處理函數 |
=> 書寫: |
-> xxx.onclick = 函數 |
-> xxx.addEventListener(事件類型, 函數) |
=> 該函數内的 this 指向 事件源(誰身上的事件) |
5. 自執行函數 |
=> 書寫: |
-> (函數)() |
-> !函數() |
-> ~函數() |
=> 該函數内的 this 指向 window |
6. 未完待續... |
強行改變 this 指向 |
+ 不管你本身指向什麼位置, 我讓你指向哪, 你就得指向哪 |
1. call() |
+ 文法: |
=> 函數名.call() |
=> 對象名.函數名.call() |
+ 參數: |
=> 第一個參數: 要修改的函數内的 this 指向 |
=> 第二個參數開始: 依次給函數内每一個參數指派 |
+ 特點: |
=> 會立即調用函數 |
+ 用處: |
=> 在立即執行的函數時才使用 |
=> 事件處理函數, 和 定時器處理函數, 一般不會使用這個方法 |
2. apply() |
+ 文法: |
=> 函數名.apply() |
=> 對象名.函數名.apply() |
+ 參數: |
=> 第一個參數: 要修改的函數内的 this 指向 |
=> 第二個參數: 是一個數組或者僞數組 |
-> 數組或者僞數組内的每一個依次給函數傳遞實參 |
+ 特點: |
=> 會立即調用函數 |
+ 作用: |
=> 在立即執行的函數時才使用 |
=> 事件處理函數, 和 定時器處理函數, 一般不會使用這個方法 |
3. bind() |
+ 文法: |
=> 函數名.bind() |
=> 對象名.函數名.bind() |
+ 參數: |
=> 第一個參數: 要修改的函數内的 this 指向 |
=> 第二個參數開始: 依次是給函數内的每一個參數指派 |
+ 特點: |
=> 不會立即調用函數 |
=> 傳回一個新的函數給你, 新的函數内的 this 是改變好的 this |
+ 作用: |
=> 在非立即調用的函數時使用 |
=> 因為他不會立即調用函數, 而是傳回一個改變好 this 指向的函數 |