前言
本文章结合VUE核心技术-尚硅谷的45-48集做的归纳总结。
教程的文档里面提到仿照github上的朋友实现的库进行讲解 github
抛开视频教程的讲解,其实github上的readme文档已经有了很详细的说明。
视频教程提供了几个点
- 数据代理
- 模板解析
- 数据绑定
Hexo 博客的 Markdown 是支持嵌套
<script></script>
标签来执行js代码的。
下面我直接使用 Markdown 来写 js 验证教程的输出结果。
不仅将运行结果打印到控制台上,也添加了网页的显示。
根据伪数组生成对应的真数组
当我们使用
getElementsByTagName
获取到元素数组,会发现这个并不是js的数组。
尽管它可以通过数组下标获取到对应的元素
数组的一些常规方法如 foreach 也无法识别
在 es6 中可以使用 Array.from 来获取到真数组
在 es5 中可以借助 Array.slice() 不传参数获取到数组的浅拷贝
借助 slice.call 可以让非数组对象执行slice方法
在 es5 中可以使用Array.prototype.slice.call(lis)
来获取到真数组
1 | const lis = document.getElementsByTagName('li') |
切换为HTML文本
点击执行js代码
node.nodeType: 得到节点类型
不同类型的节点 nodeType 值是不一样的
1 | const elementNode = document.getElementById('test') |
切换为HTML文本
点击执行js代码
给对象添加属性
defineProperty 的属性含义
属性描述符:数据描述符:
- configurable:是否可以重新定义
- enumerable:是否可以枚举
- value:初始值
- writable:是否可以修改属性值
访问描述符:
- get:回调函数,根据其它相关的属性动态计算得到当前属性值
- set:回调函数,监视当前属性值的变化,更新其它相关的属性值
通过设定 enumerable true 可以实现
for .. in keys()
的效果
1 | const obj = { |
点击执行js代码
defineProperty 属性直到 es5 才支持,因此 IE8 及以下的浏览器都不支持 defineProperty 属性
因此 Vue 也不支持 IE8 及以下的浏览器
DocumentFragment: 文档碎片(高效批量更新多个节点)
document: 对应显示的页面, 包含n个element 一旦更新document内部的某个元素界面更新
documentFragment: 内存中保存n个element的容器对象(不与界面关联), 如果更新framgnet中的某个element, 界面不变。
使用documentFragment只需更新一次界面,执行效率更加高效!!!
操作步骤:
- 创建fragment
- 取出ul中所有子节点取出保存到fragment
- 更新fragment中所有li的文本
- 将fragment插入ul
1 | const ul = document.getElementById('fragment_test') |