欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

主要用途: 判斷標(biāo)簽是原生組件還是自定義組件,直接通過map這種key-value一一對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),實(shí)現(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:(字符串類型)

所傳入需要?jiǎng)?chuàng)建map的字符串

expectsLowerCase:(布爾型)

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

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

源碼解釋

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

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

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

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

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

源碼疑問

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

我們來做一個(gè)實(shí)驗(yàn)就明白了

這里直接用瀏覽器的控制臺(tái)實(shí)驗(yàn)

var objA = Object.create(null)

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

打印出來看看

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

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

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

小結(jié):

使用Object.create條件:

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

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

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

為什么使用[ ]訪問屬性

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

  • 點(diǎn)屬性訪問器
  • 方括號(hào)屬性訪問器

我們做一個(gè)實(shí)驗(yàn)區(qū)別兩者,看看為啥尤大大要這么使用

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

var objA = Object.create(null)

訪問不存在的屬性

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

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

沒想到居然直接報(bào)錯(cuò)了

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

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

結(jié)果居然也和.訪問結(jié)果一致了?。?/p>

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

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

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

通過變量訪問

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

var temp = 'x'

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

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

而通過[]訪問時(shí)

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

小結(jié):

點(diǎn)屬性訪問器:

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

方括號(hào)屬性訪問器

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

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

  • 需要?jiǎng)討B(tài)的創(chuàng)建一個(gè)不存在的
  • 屬性屬性是一個(gè)變量

因此,選擇使用方括號(hào)屬性選擇器

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

相關(guān)文章

  • vue.js中使用echarts實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)刷新功能

    vue.js中使用echarts實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)刷新功能

    這篇文章主要介紹了vue.js中使用echarts實(shí)現(xiàn)數(shù)據(jù)動(dòng)態(tài)刷新功能,需要的朋友可以參考下
    2019-04-04
  • vue實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音功能詳解

    vue實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音功能詳解

    這篇文章主要介紹了vue實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音功能詳解的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 解決Vue大括號(hào)字符換行踩的坑

    解決Vue大括號(hào)字符換行踩的坑

    這篇文章主要介紹了解決Vue大括號(hào)字符換行踩的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue的子父組件傳值之小白必看篇

    Vue的子父組件傳值之小白必看篇

    這篇文章主要介紹了Vue的子父組件傳值之小白必看篇,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 關(guān)于axios的proxy代理配置解析

    關(guān)于axios的proxy代理配置解析

    這篇文章主要介紹了關(guān)于axios的proxy代理配置解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue路由實(shí)現(xiàn)登錄攔截

    vue路由實(shí)現(xiàn)登錄攔截

    這篇文章主要介紹了vue路由如何實(shí)現(xiàn)登錄攔截,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • 詳解vuex狀態(tài)管理模式

    詳解vuex狀態(tài)管理模式

    這篇文章主要介紹了詳解vuex狀態(tài)管理模式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Vue實(shí)現(xiàn)文件上傳和下載功能

    Vue實(shí)現(xiàn)文件上傳和下載功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)文件上傳和下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue?axios和vue-axios的關(guān)系及使用區(qū)別

    Vue?axios和vue-axios的關(guān)系及使用區(qū)別

    axios是基于promise的HTTP庫(kù),可以使用在瀏覽器和node.js中,它不是vue的第三方插件,vue-axios是axios集成到Vue.js的小包裝器,可以像插件一樣安裝使用:Vue.use(VueAxios, axios),本文給大家介紹Vue?axios和vue-axios關(guān)系,感興趣的朋友一起看看吧
    2022-08-08
  • Vue?如何關(guān)掉響應(yīng)式問題

    Vue?如何關(guān)掉響應(yīng)式問題

    這篇文章主要介紹了Vue?如何關(guān)掉響應(yīng)式問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評(píng)論