(vnode, deep)
| 1186 | |
| 1187 | //克隆节点 把节点变成静态节点 |
| 1188 | function cloneVNode(vnode, deep) { |
| 1189 | // |
| 1190 | var componentOptions = vnode.componentOptions; |
| 1191 | /*组件的option选项*/ |
| 1192 | var cloned = new VNode( |
| 1193 | vnode.tag, |
| 1194 | vnode.data, |
| 1195 | vnode.children, |
| 1196 | vnode.text, |
| 1197 | vnode.elm, |
| 1198 | vnode.context, |
| 1199 | componentOptions, |
| 1200 | vnode.asyncFactory |
| 1201 | ); |
| 1202 | cloned.ns = vnode.ns;/*当前节点的名字空间*/ |
| 1203 | cloned.isStatic = vnode.isStatic;/*静态节点标志*/ |
| 1204 | cloned.key = vnode.key;/*节点的key属性,被当作节点的标志,用以优化*/ |
| 1205 | cloned.isComment = vnode.isComment;/*是否为注释节点*/ |
| 1206 | cloned.fnContext = vnode.fnContext; //函数上下文 |
| 1207 | cloned.fnOptions = vnode.fnOptions; //函数Options选项 |
| 1208 | cloned.fnScopeId = vnode.fnScopeId; //函数范围id |
| 1209 | cloned.isCloned = true; |
| 1210 | /*是否为克隆节点*/ |
| 1211 | if (deep) { //如果deep存在 |
| 1212 | if (vnode.children) { //如果有子节点 |
| 1213 | //深度拷贝子节点 |
| 1214 | cloned.children = cloneVNodes(vnode.children, true); |
| 1215 | } |
| 1216 | if (componentOptions && componentOptions.children) { |
| 1217 | //深度拷贝子节点 |
| 1218 | componentOptions.children = cloneVNodes(componentOptions.children, true); |
| 1219 | } |
| 1220 | } |
| 1221 | return cloned |
| 1222 | } |
| 1223 | |
| 1224 | //克隆多个节点 为数组的 |
| 1225 | function cloneVNodes(vnodes, deep) { |
no test coverage detected