遇见Vue.js
- 关键词:Vue.js – 读书笔记
十八、Vue.js 源码
util

1.env

| 系统判断 | 说明 |
|---|---|
| inBrowser | 浏览器环境 |
| isIE9 | IE9 |
| isAndroid | 安卓 |
| isIos | iOS |
| isWechat | 微信 |
| 属性支持 | 说明 |
|---|---|
| hasProto | __proto__属性 |
| 过渡属性 | 说明 |
|---|---|
| transitionProp | |
| transitionEndEvent | 在CSS过渡完成后触发 |
| animationProp | 在不需要触发任何事件的情况下(区别transition)可以显式地随着时间改变元素的css属性值 |
| animationEndEvent | 在CSS动画完成后触发 |
nextTick:
异步执行,在Vue.js内部,Vue.js会使用MutationObserver来实现队列的异步处理,如果不支持会回退到setTimeout(fn,0)。当Vue.nextTick的回调函数执行时,DOM已经是更新后的状态了。
set:
创建set简单对象,挂载属性set,add,clear,has方法。
2.dom

| dom操作 | 说明 |
|---|---|
| query(el) | 查找dom元素,使用document.querySelector方法返回文档中匹配指定CSS选择器的元素集合中的第一个元素 |
| inDoc(node) | 是否在文档中,运用了ownerDocument(文档).documentElement(根节点)属性 |
| before(el, target) | 在target节点前插入el元素 |
| after(el, target) | 在target节点后插入el元素 |
| prepend(el, target) | 在target节点最前面插入el元素 |
| extractContent(el, asFragment) | 将元素内容提取到一个div元素或文本碎片中 |
| remove(el) | 删除el元素 |
| replace(target, el) | el元素替换target |
| trimNode(node) | 清除node节点内首尾空文本或注释节点,使用isTrimmable判断是否为空文本或注释节点 |
| isTemplate(el) | 是否为template模板元素 |
| isFragment(node) | 是否为轻量级的Document对象,能够容纳文档的某个部分 |
| getOuterHTML(el) | 获取元素outerHTML,如果不支持则获取innerHTML,用div元素包裹 |
| 属性操作 | 说明 |
|---|---|
| getAttr(node, _arrt) | 在node元素上获取并移除_attr属性 |
| getBindAttr(node, name) | 获取:name或v-bind:name的属性值 |
| hasBindAttr(node, name) | node元素上是否有绑定的name属性 |
| class操作 | 说明 |
|---|---|
| setClass(el, cls) | 设置class名称 |
| addClass(el, cls) | 添加className,其中classList属性返回元素的类名,作为DOMTokenList对象,该属性用于在元素中添加、移除及切换CSS类 |
| removeClass(el, cls) | 删除el元素的className,如果没有className,则移除元素的class属性 |
| 事件操作 | 说明 |
|---|---|
| on(el, event, cb, useCapture) | el绑定event事件监听(useCapture指定事件是否在捕获或冒泡阶段执行) |
| off(el, event, cb) | 移除事件监听 |
| 其他 | 说明 | |
|---|---|---|
| createAnchor(content, persist) | 创建一个“执行插入/删除锚点”。使用场景:片段代码、v-html、v-if、v-for、组件 | ![]() |
| findRef(node) | 在node元素中找到v-ref绑定的值 | |
| mapNodeRange(node, end, op) | 在范围兄弟节点内调用op函数 | |
| removeNodeRange(start, end, vm, frag, cb) | 依次移除范围内的兄弟元素并移入frag元素中 |
3.lang

| 对象操作 | 说明 |
|---|---|
| set(obj, key, val) | 设置对象属性,添加新属性触发更新 |
| del(obj, key) | 删除对象属性,触发更新 |
| hasOwn(obj, key) | 判断是否为自有属性 |
| extend(to, from) | 扩展对象属性 |
| isObject(obj) | 是否为对象 |
| isPlainObject(obj) | 是否为对象字面量 |
| def(obj, key, val) | 将属性添加到对象,或修改现有属性的特性 |
| 名称转换 | 说明 |
|---|---|
| classify(str) | 将-、_、//的命名转换成驼峰命名方式 |
| hyphenate(str) | 将驼峰命名方式转换为- |
| camelize(str) | 将-命名方式转换为驼峰式 |
| 数组操作 | 说明 |
|---|---|
| indexOf(arr, obj) | 返回obj在Array中的索引位置,没有则返回-1 |
| 类型转换 | 说明 |
|---|---|
| _toString(value) | 字符串转换 |
| toNumber(value) | 数字转换 |
| toBoolean(value) | 布尔转换 |
| toArray(value) | 数组转换 |
| 方法绑定 | 说明 |
|---|---|
| bind(fn, ctx) | ![]() |
| 其他 | 说明 |
| debounce(func, wait) | 此方法只用于input输入后,wait毫秒后调用func方法 |
| stripQuotes(str) | 去除str中的前后引号 |
| cancellable(fn) | 可以撤销的异步回调函数 |
| looseEqual(a, b) | 判断a和b是否相等(非严格意义上的===) |
| isLiteral(exp) | 检查表达式是否为字面量 |
| isReserved(str) | 检查str是否以$或_开头 |
4.components

| 属性 | 说明 |
|---|---|
| commonTagRE | 是否为普通元素 |
| reservedTagRE | 是否为自定义元素 |
| checkComponentAttr(el, options) | 检查el是否为组件,如果是则返回组件id |
5.options
mergeOptions,此方法的核心是strats对象。

resolveAsset
这部分待细分。。。
6.debug
warn——使用console.error输出警告信息

