vue編譯器util工具使用方法示例
makeMap源碼:
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]; } }
- 描述:makeMap 函數(shù)首先根據(jù)一個(gè)字符串生成一個(gè) map,然后根據(jù)該 map 產(chǎn)生一個(gè)新函數(shù),新函數(shù)接收一個(gè)字符串參數(shù)作為 key,如果這個(gè) key 在 map 中則返回 true,否則返回 undefined。
- 參數(shù):{String} str 一個(gè)以逗號(hào)分隔的字符串 、{Boolean} expectsLowerCase 是否小寫
- 返回值:根據(jù)生成的 map 產(chǎn)生的函數(shù)
isReservedTag 源碼:
var isReservedTag = function(tag) { return isHTMLTag(tag) || isSVG(tag) };
判斷一個(gè)標(biāo)簽是否是保留標(biāo)簽,我們可以知道,如果一個(gè)標(biāo)簽是html
標(biāo)簽,或者是svg
標(biāo)簽,那么這個(gè)標(biāo)簽即是保留標(biāo)簽。
pluckModuleFunction 源碼:
function pluckModuleFunction(modules,key) { return modules ? modules.map(function(m) { return m[key]; }).filter(function(_) { return _; }) : [] }
檢測在modules 數(shù)組中的成員對(duì)象是否有key屬性,如果有"采摘"出來,組成一個(gè)新的數(shù)組。
如下實(shí)例代碼:
transforms = pluckModuleFunction(options.modules, 'transformNode')
傳遞給 pluckModuleFunction 函數(shù)的第二個(gè)參數(shù)的字符串為 'transformNode',同時(shí)我們觀察 options.modules 數(shù)組:
var modules$1 = [ klass$1, style$1, model$1 ]; var klass$1 = { staticKeys: ['staticClass'], transformNode: transformNode, //處理靜態(tài)屬性和非靜態(tài)屬性 genData: genData }; var model$1 = { preTransformNode: preTransformNode }; var style$1 = { staticKeys: ['staticStyle'], transformNode: transformNode$1, //處理靜態(tài)樣式和非靜態(tài)樣式 genData: genData$1 };
此時(shí)按照 pluckModuleFunction 函數(shù)的邏輯:
modules ? modules.map(function(m) { return m[key]; }).filter(function(_) { return _; }) : []
我們拆分開看:
modules ? modules.map(function(m) { return m[key]; })
如果modules存在則,調(diào)用 modules.map 創(chuàng)建一個(gè)新的數(shù)組。
[ transformNode, transformNode$1, undefined ]
還沒完緊接著又在新生成的數(shù)組之上調(diào)用了 filter 函數(shù)相當(dāng)于:
[transformNode, transformNode$1, undefined].filter(function(_){ return _ });
把值為 undefined 的元素過濾掉,所以最終生成的數(shù)組如下:
[transformNode, transformNode$1]
isReserved 源碼:
function isReserved(str) { var c = (str + '').charCodeAt(0); return c === 0x24 || c === 0x5F }
在Vue中不允許使用以$或_開頭的字符串作為data數(shù)據(jù)的字段名, isReserved 函數(shù)用來檢測一個(gè)字符串是否以$ 或者 _ 開頭。
如:
new Vue({ data: { $count: 1, // 不允許 _ret: 2 // 不允許 } })
isReserved是如何判斷一個(gè)字符串是否以 $ 或 _ 開頭呢?
它的實(shí)現(xiàn)方式是通過字符串的 charCodeAt 方法獲得該字符串第一個(gè)字符的 unicode,然后與 0x24 和 0x5F 作比較。其中 $ 對(duì)應(yīng)的 unicode 碼為 36,對(duì)應(yīng)的十六進(jìn)制值為 0x24;_ 對(duì)應(yīng)的 unicode 碼為 95,對(duì)應(yīng)的十六進(jìn)制值為 0x5F。
以上就是vue編譯器util工具使用方法示例的詳細(xì)內(nèi)容,更多關(guān)于vue編譯器util工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue-cli創(chuàng)建的項(xiàng)目中的gitHooks原理解析
這篇文章主要介紹了vue-cli創(chuàng)建的項(xiàng)目中的gitHooks原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Vue 2.5 Level E 發(fā)布了: 新功能特性一覽
很高興Vue 2.5 Level E 發(fā)布了。在這篇文章中,我們將重點(diǎn)介紹一些更重要的的變化:更好的 TypeScript 集成,更好的錯(cuò)誤處理,更好地支持單文件組件中的函數(shù)式組件以及與環(huán)境無關(guān)的服務(wù)端渲染2017-10-10vue實(shí)現(xiàn)文字橫向無縫走馬燈組件效果的實(shí)例代碼
這篇文章主要介紹了vue 文字橫向無縫走馬燈組件的實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04element-plus中el-table點(diǎn)擊單行修改背景色方法
這篇文章主要給大家介紹了關(guān)于element-plus中el-table點(diǎn)擊單行修改背景色的相關(guān)資料,這是產(chǎn)品新加了的一個(gè)需求,分享給同樣遇到這個(gè)需求的朋友,需要的朋友可以參考下2023-07-07vue-element-admin登錄攔截設(shè)置白名單方式
這篇文章主要介紹了vue-element-admin登錄攔截設(shè)置白名單方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03vue實(shí)現(xiàn)用戶動(dòng)態(tài)權(quán)限登錄的代碼示例
這篇文章主要介紹了vue如何實(shí)現(xiàn)用戶動(dòng)態(tài)權(quán)限登錄,文中的代碼示例介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)vue有一定的幫助,需要的朋友可以參考閱讀2023-05-05