vue 箭頭函式相容性 VUE this丟失

2021-10-18 00:17:08 字數 922 閱讀 6789

最近在乙個 vue 的專案中重構功能時,遇到乙個有趣的問題,場景是通過介面動態獲取名稱並顯示在下拉列表中,第一次實現的**如下:

但這樣寫**可擴充套件性很低,例如這時候需要新增乙個查詢使用者身份的下拉框就要再寫乙個方法,為了避免複製一堆重複**。所以我做了一些修改:

但是在執行後,輸入名稱,檢視中的 option 卻沒有如預期一樣更新後端返回的資料。檢視控制台 network 發起了請求,vue-tools 中檢視 this[typename] 的確是更新後的值。突然就有點懵了,問題出在什麼地方?

分析

在**中分別列印 this1 和 this2 兩個值,發現他們的 _uid 竟然不一樣,再看看 this1 中的資料被響應式的更新,但是 this2 中根本沒有。

_uid 不一致

原因

method 中的方法是在 vue 例項初始化階段(init)進行繫結 this,指向當前 vue 例項;而 template 中的**是在 render 階段執行,導致匿名函式的 this 指向**執行時的上下文,它也是乙個 vuecomponent 例項,但不是同乙個。

解決

辦法是用箭頭函式替換普通 function,因為箭頭函式 this 繼承自它的外層,且無法被修改。這樣就保證 this 不會丟失。

修改後 _uid 一致

react 類元件在呼叫方法時也遇到過 this 丟失的問題,同樣可以使用箭頭函式來解決這個問題,而且兩者造成 this 丟失的原因也非常類似。

回過頭想一想,還是印證了那句老話:日光之下,並無新事。

相容性(空格相容性)

在chrome與firefox下顯示的寬度不同,原因是兩個瀏覽器的預設字型不同,給html規定字型即可解決。下面有各種形式的空格,各有不同 不換行空格,按下空格鍵所產生的空格,受字型影響明顯 ensp 半形空格 em寬度的一半 乙個小寫字母的寬度 基本不受字型影響 emsp 全形空格 乙個em寬度 ...

Excel SUMIF函式的相容性

說相容性,當然得說sumif了。來,我們先舉個例子。現有乙個 算起來只有 科目劃分 發生額 兩列內容,但是折成了很多列。我們需要統計 郵寄費 的總發生額。這可怎麼辦呀,總不能手動整成兩列吧?這時候,sumif的相容性就顯現出來了。還是像往常一樣。我們使用sumif,將 科目劃分 為 郵寄費 的 發生...

相容性小結

1.不同瀏覽器的標籤預設的外補丁和內補丁不同。解決 2.chorme瀏覽器下字型最小12px 解決 font size 12px webkit transform origin x 0 webkit transform scale 0.5833333333333334 scale 12 3.ie瀏覽...