在vue基本的执行流程存在如下问题:
1) Vue使用的是虚拟DOM
2 )只考虑了单属性 ( {
{name}} ),没有考虑层级 ( {
{a.b.c.d}} ),而vue中大量的使用层级 ( {
{ child.name.firstName }} )
3 )代码没有整合
为了解决上述问题,可以采用如下方法:
1)将真正的DOM和虚拟的DOM相互转换,提供如下方案:
- 采用深拷贝,(递归函数)
- 采用栈结构,使用栈存储父元素来实现递归生成(Vue的源码采用的方式,因为Vue里面是把元素转换为字符串处理)
2)考虑多属性,封装一个通过路径获取对象值的函数。(可采用函数柯里化技巧)
3)可以采用面向对象的方法整合代码。
案例
<div id="root">
<p>
{
{
name.firstName}}
</p>
<p>
{
{
a.b.c.d.e}}
</p>
</div>
// 利用了函数柯里化 的技巧,实现获取对象内部属性的值
function createGetValueByPath(path){
let paths = path.split('.');
return function getValueByPath(obj){
let res = obj;
let prop;
while(prop = paths.