mount挂载过程
1 | Vue.prototype._init = function (options?: Object) { |
运行时版本中存在两个 $mount
方法,Vue内部首先会将公开版本赋值给 mount
变量,然后重写 $mount
方法,并在该方法中进行调用 mount
方法,mount
方法主要调用 mountComponent
方法,用于加载组件。
1 | // public mount method |
1 | const mount = Vue.prototype.$mount |
1 | function createFunction (code, errors) { |
总结
有一点像插槽的感觉,后面如果要替换编译方案,直接修改 createCompilerCreator
就可以了,而内部的代码基本不需要改变。
先编写好内部的代码,留出一个插槽,随时可以替换。
有个两参数需要被设置,所以利用柯里化,则需要调用两次。此处利用了自执行方案,两次设定预定的基本参数,包括 baseOption
和 baseCompile
。
而对于在 baseCompiler
包裹之后的 complier
方法,又利用了 createCompileToFunctionFn
在进行包裹一层,对于compiler出来的内容,利用new Function 转换成function代码。这里有一点像装饰模式。
那么为什么不直接一次就搞定,要分两次去设置baseOption和baseCompile?
1 baseOption
是一定不会有改变的,而 baseCompile
是后面可能被调整的,他们两个是没有必要被耦合在一起。
2 分开设置可以降低耦合性。
3 compile
会被传递到后面的函数进一步进行处理,而 baseOption
只是被设置一次就可以
4 如果要放在一起的话,那么其实也可以直接放到一个对象中就可以了,这应该是关于纯函数的划分问题。
5 另外 baseOption
会被用到,需要和用户填入的option进行合并,而 baseCompiler
则是只需要存储一份就好了,保存在闭包中即可。后面需要用到编译,那么都可以用同一个 baseCompile
的包装function。