-
从属性名上,computed是计算属性,也就是依赖其它的属性计算所得出最后的值,通常就是简单的计算,一般用于纯粹的取值计算;watch是去监听一个值的变化,然后执行相对应的函数,做一些特定的操作,一般用于数据变化时执行异步操作或开销比较大的操作。
-
从实现上,computed的值在getter执行后是会缓存的,只有在它依赖的属性值改变之后,下一次获取computed的值时才会重新调用对应的getter来计算;watch在每次监听的值变化时,都会执行回调。
-
如果一个值依赖多个属性(多对一),用computed肯定是更加方便的;如果一个值变化后会引起一系列操作,或者一个值变化会引起一系列值的变化(一对多),用watch更加方便一些。
-
computed会产生新的属性,产生的新的属性与data中原有的属性功能没有区别,用法一样;watch不会产生新的属性。
-
computed会在vue实例化过程中执行一次;watch在vue初始化时,不会执行。
-
watch和computed并没有哪个更底层,watch内部调用的是vm.$watch,它们的共同之处就是每个定义共的属性都单独建立了一个Watcher对象。