var SSR_ATTR = 'data-server-rendered';
这边有个vue SSR的定义。服务端渲染,后面在6446行才有。看到了单独给他写一篇。
var ASSET_TYPES = [ 'component', 'directive', 'filter' ];
组件能够拥有的资产类型列表,这边有几个过滤器,自定义,组件的定义,后面看到后打锚点
var LIFECYCLE_HOOKS = [ 'beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'beforeDestroy', 'destroyed', 'activated', 'deactivated', 'errorCaptured', 'serverPrefetch' ];
生命周期的钩子。。。依旧留个锚点
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 });
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字母
function isReserved (str) { var c = (str + '').charCodeAt(0); return c === 0x24 || c === 0x5F }
检查字符串开头是否为 $ 或 _ ASCII
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
十进制 | 十六进制 | 字符 |
---|---|---|
36 | 0x24 | $ |
95 | 0x5F | _ |
function def (obj, key, val, enumerable) { Object.defineProperty(obj, key, { value: val, enumerable: !!enumerable, writable: true, configurable: true }); }
定义属性,其中!!强制转换 boolean
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 } }
解析简单的路径。vue
首先定义了一个正则。其中source属性返回一个字符串,该字符串包含regexp对象的源文本,而且它不包含两边的两个正斜杠和任何标志。
test() 方法检查字符串是否匹配bailRE
segments将path用split分割成字符串数组,一个循环(obj)是什么?
var hasProto = '__proto__' in {}; var inBrowser = typeof window !== 'undefined'; var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform; var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(); var UA = inBrowser && window.navigator.userAgent.toLowerCase(); var isIE = UA && /msie|trident/.test(UA); var isIE9 = UA && UA.indexOf('msie 9.0') > 0; var isEdge = UA && UA.indexOf('edge/') > 0; var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android'); var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios'); var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; var isPhantomJS = UA && /phantomjs/.test(UA); var isFF = UA && UA.match(/firefox\/(\d+)/); var nativeWatch = ({}).watch;
这个太基础了,很少解释了。若是须要能够百度一下userAgent