1.new vue主要init了什么
initlifecycle
initevents
initrender
initstate
initinjections
initprovide
2.vue挂载过程
首先mount方法拿到template通过compileToFunction编译为render函数,首先读缓存看有没有render,如果没有就调用compile方法获得render字符串形式,再通过new function的方式转为render函数,compile方法有三步:1.parse函数,主要功能是采用html parses将template转为AST。2.optimize 标记静态节点,为后面patch过程中新旧vnode比较做优化,标记为static的节点的子树,不参与下面diff运算的比较。3.generate 主要功能是拼接声称render函数的字符串
3.router实现原理
在router/index.js定义跳转组件的路径,在点击router-link的时候,执行history方法hash不包含在http的请求中,每次hash变化都在浏览器记录里添加,并跳转这个路径链接,根据定义的路径检索组件(组件名与路径/后面的名称对应)将router-view标签内部的html替换为该组件的html,。以上为我个人的理解。
4.computed与watch区别
computed计算依赖数据得到一个结果存到缓存,下次依赖的数据没有变化就直接读缓存,不能执行异步,调用defineproperty用到了getter和setter方法(defineproperty主要修改或更新某个属性或者对象)
watch是监听某个属性,接受新值,更新旧值,支持异步,watch如果设置了immediate: true属性,不需要等待数据变化,在初始化时就立刻执行一次,如果设置了deep: true,会深度遍历,收集每个对象属性添加到watch的watcher,当任意一个属性变化时,watch的handle就会被调用