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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| import { reactive } from './reactive'; import Computed from './Computed'; import Watcher from './Watcher'; 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 watcherIns = this.initWatcher(vm, watch);
this.$computed = computedIns.update.bind(computedIns); this.$watch = watcherIns.invoke.bind(watcherIns); } 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 (const key in computed) { computedIns.addComputed(vm, computed, key); }
return computedIns; }
initWatcher(vm, watch) {
const watcherIns = new Watcher(); for (const key in watch) { watcherIns.addWatcher(vm, watch, key); } return watcherIns; } }
export default Vue;
|