仿vue实现computed过程
仿vue实现computed过程
get实现
computed的get实现非常简单,遍历传过来的computed对象,并将每个对象挂载到vm上,如下图:
其中获取的值是computed里面的函数引用,并执行该函数。在执行该函数时,会获取相关data,触发data的get方法,返回val:
实现动态绑定
要想实现动态绑定,关键是如何把更新后的值渲染到模板。其实就是如何给data添加watcher。本人是在compile过程中生成watcher实例,如下所示:
里面的回调函数为更新模板的回调函数,在new watcher过程中,并执行get函数,将watcher绑定到Dep.target,如下所示:
然后获取vm上的key值,此时执行get方法,执行computed函数:
获取依赖值的过程中会触发data的get方法,并将watcher添加进data的subs中。
当data值发生改变时,执行dep.notify()方法。该方法就是遍历subs,并执行watcher上的回调函数。此时,所有过程执行完毕。