VueJS

VueJS学习之旅 07

2017-01-19  本文已影响1133人  小A家的铭

下面我就来看看Vue的核心构造器以及其实例的属性和方法。


Vue构造器

从 'src/core/index.js' 文件中可以找到Vue构造器的定义是在 'src/core/instance/index.js' 中给出的。
打开该文件,我们来看看代码。

// src/core/instance/index.js

import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'

function Vue (options) {
  if (process.env.NODE_ENV !== 'production' &&
    !(this instanceof Vue)) {
    warn('Vue is a constructor and should be called with the `new` keyword')
  }
  this._init(options)
}

initMixin(Vue)
stateMixin(Vue)
eventsMixin(Vue)
lifecycleMixin(Vue)
renderMixin(Vue)
  • 非常简短,该构造器接收一个对象类型的 options 参数。
  • 初始化Vue实例对象时,默认调用原型对象上的 _init (Vue.prototype._init) 方法。

该文件中还通过调用一些模块,给Vue增加了一些实例方法。

  • 与数据相关的方法:$set, $delete, $watch
  • 与事件相关的方法:$on, $once, $off, $emit
  • 与生命周期相关的方法:$forceUpdate, $destroy
  • 还有一个与生命周期相关的方法 $mount 是在entiry文件(如: 'src/entries/web-runtime-with-compiler.js')中定义的。

以上的这些方法,就是对应官方API中实例方法。

Vue实例对象方法

结合官方API文档和源码,具体来看看这些实例方法。

实例方法 / 数据相关

实例方法 / 事件相关

实例方法 / 生命周期相关

Vue对象实例的属性

有关于Vue实例属性的初始化,基本上是调用 Vue.prototype._init 方法中完成的。上面提到过这个方法会在new Vue(options) 时自动调用。
这个方法定义在 'src/core/instance/init.js' 文件中,简要地看看它都做了什么。

  1. 初始化 vm.$options,主要是调用 mergeOptions 方法,将构造器的默认属性与给定的options合并后赋值为 vm.$options
  2. 初始化生命周期相关的属性,给 vm.$parent, vm.$root, vm.$children, vm.$refs 等属性赋值。
  3. 初始化 vm 事件监听,将父组件事件更新到当前对象
  4. 调用 'beforeCreate' 生命周期事件处理函数
  5. 初始化与data相关的属性,这里面有一步重要的操作,就是observe数据(vm._data,vm.$data就是对该对象的代理)。这会创建Observer对象并调用 defineReactive 函数,这是Vue实现双向数据邦定的基础。具体请参照 defineReactive 函数以及JS属性描述符相关资料。
  6. 调用 'created' 生命周期事件处理函数
  7. 初始化 render 相关的属性:$slots, $scopedSlots等。

结合官方API文档和源码,具体来看看这些实例属性的含义以及他们是如何赋初值的。

上一篇下一篇

猜你喜欢

热点阅读