function Watcher (vm, exp, cb) { this.vm = vm this.exp = exp this.cb = cb this.value = this.get() } Watcher.prototype = { update: function () { var value = this.vm.data[this.exp] var oldValue = this.value if (value !== oldValue) { this.value = value this.cb.call(this.vm, value, oldValue) } }, get: function () { Dep.target = this var value = this.vm.data[this.exp] Dep.target = null return value } }