| 6828 | |
| 6829 | //初始化内部组件 |
| 6830 | function initInternalComponent( |
| 6831 | vm, //vue实例 |
| 6832 | options //选项参数 |
| 6833 | ) { |
| 6834 | var opts = vm.$options = Object.create(vm.constructor.options); //vm的参数 |
| 6835 | // doing this because it's faster than dynamic enumeration. 这样做是因为它比动态枚举快。 |
| 6836 | // var options = { |
| 6837 | // _isComponent: true, //是否是组件 |
| 6838 | // parent: parent, //组件的父节点 |
| 6839 | // _parentVnode: vnode, //组件的 虚拟vonde 父节点 |
| 6840 | // _parentElm: parentElm || null, //父节点的dom el |
| 6841 | // _refElm: refElm || null //当前节点 el |
| 6842 | // } |
| 6843 | var parentVnode = options._parentVnode; |
| 6844 | opts.parent = options.parent; //组件的父节点 |
| 6845 | opts._parentVnode = parentVnode; //组件的 虚拟vonde 父节点 |
| 6846 | opts._parentElm = options._parentElm; //父节点的dom el |
| 6847 | opts._refElm = options._refElm; //当前节点 el |
| 6848 | |
| 6849 | var vnodeComponentOptions = parentVnode.componentOptions; //组件参数 |
| 6850 | opts.propsData = vnodeComponentOptions.propsData; //组件数据 |
| 6851 | opts._parentListeners = vnodeComponentOptions.listeners;//组件 事件 |
| 6852 | opts._renderChildren = vnodeComponentOptions.children; //组件子节点 |
| 6853 | opts._componentTag = vnodeComponentOptions.tag; //组件的标签 |
| 6854 | |
| 6855 | if (options.render) { //渲染函数 |
| 6856 | opts.render = options.render; //渲染函数 |
| 6857 | opts.staticRenderFns = options.staticRenderFns; //静态渲染函数 |
| 6858 | } |
| 6859 | } |
| 6860 | |
| 6861 | //解析new Vue constructor上的options拓展参数属性的 合并 过滤去重数据 |
| 6862 | function resolveConstructorOptions(Ctor) { |