官方文档

Vue官方文档

关于computed properties的实现

1、先把data里所有的对象做深度遍历,为每个对象的setter绑定一个watcher,这个watcher只到自己是被绑在哪个对象上。

2、运行某一个computed函数,运行的时候这个函数所依赖的data里的变量对应的watcher将会被触发,这样这个变量就知道了自身被哪些computed函数依赖。

3、在data里所有对象的setter里,由于知道被谁依赖,一旦触发setter的时候就会触发依赖函数。

下文是另一版本的解释:

计算属性的魔法在于缓存,即不需要在每次读取的时候去运行计算方法,而仅仅是依赖的变量变化后才运行计算方法。

其实现的主要思路为:

    var name = {
        data: {
            firstName: 'bill',
            lastName: 'gates'
        },
        computed: {
            fullName: function(){
                return this.firstName + this.lastName;
            }
        }
    }
    var computedPropertiesWhoDependenceMe = [];
    getter: function(){
        for(dep in dependence){
            computedPropertiesWhoDependenceMe.push(dep)
        }
    },
    setter: function(){
        //执行computedPropertiesWhoDependenceMe里的依赖属性对应的dependenceFunction,得到计算属性的值,并保存起来
    }

参考:https://www.skyronic.com/blog/vuejs-internals-computed-properties