vue的原始碼解析(內部定義及配置)
SSR_ATTR
var SSR_ATTR = 'data-server-rendered';
這邊有個vue SSR的定義。服務端渲染,後面在6446行才有。看到了單獨給他寫一篇。
ASSET_TYPES
var ASSET_TYPES = [ 'component', 'directive', 'filter' ];
元件可以擁有的資產型別列表,這邊有幾個過濾器,自定義,元件的定義,後面看到後打錨點
LIFECYCLE_HOOKS
var LIFECYCLE_HOOKS = [ 'beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'beforeDestroy', 'destroyed', 'activated', 'deactivated', 'errorCaptured', 'serverPrefetch' ];
生命週期的鉤子。。。依舊留個錨點
config
var config = ({ optionMergeStrategies: Object.create(null), //是否發出警告 silent: false, //啟動時顯示生產模式提示訊息 productionTip: "development" !== 'production', //是否啟用devtools devtools: "development" !== 'production', //是否記錄效能 performance: false, //用於監視程式錯誤的錯誤處理程式 errorHandler: null, //用於監視程式警告的警告處理程式 warnHandler: null, //忽略某些自定義元素 ignoredElements: [], //v-on為自定義使用者關鍵字 keyCodes: Object.create(null), //檢查是否保留了標記,以便不能將其註冊為元件。 isReservedTag: no, //檢查是否保留了屬性,以便它不能用作元件屬性。 isReservedAttr: no, //檢查標記是否為未知元素。 isUnknownElement: no, //獲取元素的名稱空間 getTagNamespace: noop, //解析特定平臺的實際標記名稱 parsePlatformTagName: identity, //檢查屬性是否必須使用屬性(例如value)繫結 mustUseProp: no, //非同步執行更新。用於Vue測試Utils,如果設定為false,這將顯著降低效能 async: true, //由於遺留原因而暴露 _lifecycleHooks: LIFECYCLE_HOOKS });
Unicode正則表示式
var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
用於分析HTML標記、元件名稱和屬性路徑的Unicode字母
isReserved
function isReserved (str) { var c = (str + '').charCodeAt(0); return c === 0x24 || c === 0x5F }
檢查字串開頭是否為 $ 或 _ASCII
十進位制 | 十六進位制 | 字元 |
---|---|---|
36 | 0x24 | $ |
95 | 0x5F | _ |
def
function def (obj, key, val, enumerable) { Object.defineProperty(obj, key, { value: val, enumerable: !!enumerable, writable: true, configurable: true }); }
定義屬性,其中!!強制轉換 boolean
parsePath
var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]")); function parsePath (path) { if (bailRE.test(path)) { return } var segments = path.split('.'); return function (obj) { for (var i = 0; i < segments.length; i++) { if (!obj) { return } obj = obj[segments[i]]; } return obj } }
解析簡單的路徑。
首先定義了一個正則。其中source屬性返回一個字串,該字串包含regexp物件的源文字,並且它不包含兩邊的兩個正斜槓和任何標誌。
test() 方法檢查字串是否匹配bailRE
segments將path用split分割成字串陣列,一個迴圈(obj)是什麼?