1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| import { reactive } from "./reactive.js" import Computed from './computed.js' import Watcher from './watcher.js'
class Vue { constructor(options) { const { data, computed, watch } = options; this.$data = data()
this.init(this, computed, watch) }
init(vm, computed, watch) { this.initData(vm) const computedIns = this.initComputed(vm, computed) const watchIns = this.initWatcher(vm, watch)
this.$computed = computedIns.update.bind(computedIns) this.$watch = watchIns.invoke.bind(watchIns) }
initData(vm) { reactive(vm, (key, value) => { }, (key, newValue, oldValue) => { if (newValue == oldValue) return this.$computed(key, this.$watch) this.$watch(key, newValue, oldValue) }) }
initComputed(vm, computed) { const computedIns = new Computed() for (let key in computed) { computedIns.addComputed(vm, computed, key) } return computedIns }
initWatcher(vm, watch) { const watchIns = new Watcher()
for (let key in watch) { watchIns.addWatcher(vm, watch, key) } return watchIns }
}
export default Vue;
|