// 入口// 当 options 中有 watch,并且 watch 不等于有些浏览器上(火狐)自带的 watch,则视为有效的 watch,进行初始化if (opts.watch && opts.watch !== nativeWatch) { initWatch(vm, opts.watch)}function initWatch (vm: Component, watch: Object) { // 遍历循环,通过 $watch 创建 for (const key in watch) { const handler = watch[key] if (Array.isArray(handler)) { for (let i = 0; i < handler.length; i++) { createWatcher(vm, key, handler[i]) } } else { createWatcher(vm, key, handler) } }}function createWatcher ( vm: Component, expOrFn: string | Function, handler: any, options?: Object) { if (isPlainObject(handler)) { options = handler handler = handler.handler } if (typeof handler === 'string') { handler = vm[handler] } return vm.$watch(expOrFn, handler, options)}