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 _;
}) : []
}
檢測(cè)在modules 數(shù)組中的成員對(duì)象是否有key屬性,如果有"采摘"出來(lái),組成一個(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 _;
}) : []
我們拆分開(kāi)看:
modules ? modules.map(function(m) {
return m[key];
})
如果modules存在則,調(diào)用 modules.map 創(chuàng)建一個(gè)新的數(shù)組。
[ transformNode, transformNode$1, undefined ]
還沒(méi)完緊接著又在新生成的數(shù)組之上調(diào)用了 filter 函數(shù)相當(dāng)于:
[transformNode, transformNode$1, undefined].filter(function(_){ return _ });
把值為 undefined 的元素過(guò)濾掉,所以最終生成的數(shù)組如下:
[transformNode, transformNode$1]
isReserved 源碼:
function isReserved(str) {
var c = (str + '').charCodeAt(0);
return c === 0x24 || c === 0x5F
}
在Vue中不允許使用以$或_開(kāi)頭的字符串作為data數(shù)據(jù)的字段名, isReserved 函數(shù)用來(lái)檢測(cè)一個(gè)字符串是否以$ 或者 _ 開(kāi)頭。
如:
new Vue({
data: {
$count: 1, // 不允許
_ret: 2 // 不允許
}
})
isReserved是如何判斷一個(gè)字符串是否以 $ 或 _ 開(kāi)頭呢?
它的實(shí)現(xiàn)方式是通過(guò)字符串的 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.js 子組件無(wú)法獲取父組件store值的解決方式
今天小編就為大家分享一篇vue.js 子組件無(wú)法獲取父組件store值的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Vue3?使用v-model實(shí)現(xiàn)父子組件通信的方法(常用在組件封裝規(guī)范中)
這篇文章主要介紹了Vue3?使用v-model實(shí)現(xiàn)父子組件通信(常用在組件封裝規(guī)范中)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
vue 解決報(bào)錯(cuò)問(wèn)題小結(jié)
最近入門vue,用字節(jié)跳動(dòng)的arco初始化一個(gè)項(xiàng)目的時(shí)候報(bào)錯(cuò)自己解決后沒(méi)來(lái)的及截圖,從別人那拷貝個(gè)網(wǎng)圖把,是一樣的報(bào)錯(cuò),本文給大家分享vue 解決報(bào)錯(cuò)問(wèn)題小結(jié),感興趣的朋友一起看看吧2023-09-09
Vue系列:通過(guò)vue-router如何傳遞參數(shù)示例
本篇文章主要介紹了Vue系列:通過(guò)vue-router如何傳遞參數(shù)示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01
vue如何通過(guò)插槽組件之間數(shù)據(jù)傳遞
這篇文章主要介紹了vue如何通過(guò)插槽組件之間數(shù)據(jù)傳遞問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06

