最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue源碼makeMap函數(shù)深入分析

 更新時間:2022年08月12日 17:15:02   作者:qq_22841387  
vue源碼中的makeMap用在很多地方,主要是判斷標(biāo)簽是原生標(biāo)簽還是用戶自定義的組件,但是標(biāo)簽很多,如果每判斷一次都執(zhí)行一次循環(huán),累計下來,性能損耗還是很大的,makeMap就是解決這個問題出現(xiàn)的

前言

創(chuàng)建一個map,返回一個檢查key是否在map中的函數(shù)

主要用途: 判斷標(biāo)簽是原生組件還是自定義組件,直接通過map這種key-value一一對應(yīng)的數(shù)據(jù)結(jié)構(gòu),實現(xiàn)快速判斷

  /**
   * Make a map and return a function for checking if a key
   * is in that map.
   */
function makeMap (
    str,
    expectsLowerCase
  ) {
    var map = Object.create(null);
    var list = str.split(',');
    for (var i = 0; i < list.length; i++) {
      map[list[i]] = true;
    }
    return expectsLowerCase
      ? function (val) { return map[val.toLowerCase()]; }
      : function (val) { return map[val]; }
  }

參數(shù)解釋

str:(字符串類型)

所傳入需要創(chuàng)建map的字符串

expectsLowerCase:(布爾型)

是否需要全部轉(zhuǎn)為小寫——也就是說,str中出現(xiàn)非小寫字母 則不需要

若沒傳,則為undefined為falsy——假值(也就不會觸發(fā)小寫轉(zhuǎn)換方法)

源碼解釋

首先通過Object.create創(chuàng)建一個對象,將傳入的字符串str以,分隔,生成一個list數(shù)組

對list數(shù)組進行循環(huán),通過[list[i]]創(chuàng)建一個key-value的map

  • key:為字符串類型
  • value:全部為true——布爾類型

判斷函數(shù)參數(shù)expectsLowerCase是否true

  • true——返回一個忽略大小寫,判斷key是否存在的函數(shù)
  • false——返回一個判斷key是否存在的函數(shù)

源碼疑問

為什么這里使用Object.create創(chuàng)建一個對象,而不直接使用{ }創(chuàng)建呢?

我們來做一個實驗就明白了

這里直接用瀏覽器的控制臺實驗

var objA = Object.create(null)

首先我們創(chuàng)建一個objA——通過Object.create(null)

打印出來看看

然后在創(chuàng)建一個objB,直接賦值{}

我們發(fā)現(xiàn)直接通過Object.create(null)創(chuàng)建的東西,十分干凈,也不存在原型鏈和原型方法

而通過{ }創(chuàng)建出來的東西,很明顯出現(xiàn)了很多不需要的屬性

小結(jié):

使用Object.create條件:

  • 需要一個非常干凈和高可定制的對象
  • 無需使用Object原型鏈中的方法

在其他正常情況下,直接使用{ }即可

很顯然,源碼這里是需要創(chuàng)建一個非常干凈的對象,從而使用的Object.create方法

為什么使用[ ]訪問屬性

對象獲取屬性的方法有兩種,當(dāng)然還可以直接使用對象解構(gòu)獲取屬性

  • 點屬性訪問器
  • 方括號屬性訪問器

我們做一個實驗區(qū)別兩者,看看為啥尤大大要這么使用

首先我們先創(chuàng)建一個obj

var objA = Object.create(null)

訪問不存在的屬性

當(dāng)我們使用點屬性訪問器訪問一個不存在的屬性時,結(jié)果是undefined

現(xiàn)在試試使用方括號訪問器試試

沒想到居然直接報錯了

報錯的信息是x 沒被定義,看來是把x當(dāng)成變量了

那我們直接使用字符串試試

結(jié)果居然也和.訪問結(jié)果一致了??!

動態(tài)創(chuàng)建屬性

現(xiàn)在我們使用點屬性訪問器去創(chuàng)建一個不存在的屬性時

使用方括號屬性訪問器創(chuàng)建時,結(jié)果一致

通過變量訪問

定義一個temp變量,存放我們需要訪問的key

var temp = 'x'

我們現(xiàn)在使用.訪問這個變量

結(jié)果居然發(fā)現(xiàn),這個東西的結(jié)果和訪問不存在屬性一樣

而通過[]訪問時

結(jié)果就是訪問temp所代表的x

小結(jié):

點屬性訪問器:

  • 直接訪問.后面的值——因此不支持變量訪問

方括號屬性訪問器

  • 訪問不存在變量時,若不是變量,需要以字符串形式出現(xiàn)
  • 支持變量訪問

當(dāng)然因為這里是需要直接動態(tài)的獲取數(shù)組的內(nèi)容,相當(dāng)于

  • 需要動態(tài)的創(chuàng)建一個不存在的
  • 屬性屬性是一個變量

因此,選擇使用方括號屬性選擇器

到此這篇關(guān)于Vue源碼makeMap函數(shù)深入分析的文章就介紹到這了,更多相關(guān)Vue makeMap函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何在vue中使用video.js播放m3u8格式的視頻

    如何在vue中使用video.js播放m3u8格式的視頻

    這篇文章主要介紹了如何在vue中使用video.js 播放m3u8格式的視頻,幫助大家更好的理解和學(xué)習(xí)使用vue,感興趣的朋友可以了解下
    2021-02-02
  • vue基于element的區(qū)間選擇組件

    vue基于element的區(qū)間選擇組件

    這篇文章主要介紹了vue基于element的區(qū)間選擇組件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 在vue項目中使用sass的配置方法

    在vue項目中使用sass的配置方法

    這篇文章主要介紹了在vue項目中使用sass的配置方法,需要的朋友可以參考下
    2018-03-03
  • vue Element UI 解決表格數(shù)據(jù)不更新問題及解決方案

    vue Element UI 解決表格數(shù)據(jù)不更新問題及解決方案

    在使用Vue和ElementUI開發(fā)后臺管理系統(tǒng)時,可能會遇到表格數(shù)據(jù)不更新的問題,這通常是因為Vue的響應(yīng)式系統(tǒng)未檢測到數(shù)據(jù)變化或數(shù)據(jù)更新后未正確觸發(fā)視圖的重新渲染,本文給大家介紹vue Element UI 解決表格數(shù)據(jù)不更新問題,感興趣的朋友一起看看吧
    2024-10-10
  • Vue-scoped(局部)樣式使用方法及實例代碼

    Vue-scoped(局部)樣式使用方法及實例代碼

    這篇文章主要介紹了Vue-scoped(局部)樣式使用方法及實例代碼,文中示例代碼介紹了的非常詳細感興趣的同學(xué)可以參考閱讀一下
    2023-05-05
  • vue3封裝自定義v-model的hooks示例詳解

    vue3封裝自定義v-model的hooks示例詳解

    這篇文章主要為大家介紹了vue3封裝自定義v-model的hooks示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • mpvue+vuex搭建小程序詳細教程(完整步驟)

    mpvue+vuex搭建小程序詳細教程(完整步驟)

    這篇文章主要介紹了mpvue+vuex搭建小程序詳細教程(完整步驟),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • vue解決跨域路由沖突問題思路解析

    vue解決跨域路由沖突問題思路解析

    Vue.js(讀音 /vju&#720;/, 類似于 view) 是一套構(gòu)建用戶界面的漸進式框架。本文給大家詳細介紹了vue解決跨域路由沖突問題思路解析,需要的朋友參考下吧
    2017-11-11
  • vue中動態(tài)獲取變量名并賦值方式

    vue中動態(tài)獲取變量名并賦值方式

    這篇文章主要介紹了vue中動態(tài)獲取變量名并賦值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • vue 導(dǎo)出文件,攜帶請求頭token操作

    vue 導(dǎo)出文件,攜帶請求頭token操作

    這篇文章主要介紹了vue 導(dǎo)出文件,攜帶請求頭token操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

吴江市| 广灵县| 五寨县| 太白县| 凤山县| 武川县| 安丘市| 博乐市| 绥棱县| 中方县| 佳木斯市| 托克逊县| 霍林郭勒市| 鸡东县| 宁安市| 沧州市| 张家港市| 拜城县| 行唐县| 苏尼特右旗| 东阿县| 永安市| 泉州市| 山东| 昌邑市| 霍城县| 六枝特区| 通河县| 普洱| 沙坪坝区| 宣汉县| 蚌埠市| 河北省| 中江县| 桃园市| 宜春市| 商洛市| 霞浦县| 西峡县| 昌宁县| 武夷山市|