text: var mergeOptions = require('../util').mergeOptions
  
  /**
   * The main init sequence. This is called for every
   * instance, including ones that are created from extended
   * constructors.
   *
   * @param {Object} options - this options object should be
   *                           the result of merging class
   *                           options and the options passed
   *                           in to the constructor.
   */
  
  exports._init = function (options) {
  
    options = options || {}
  
    this.$el = null
    this.$parent = options._parent
    this.$root = options._root || this
    this.$children = []
    this.$ = {}           // child vm references
    this.$$ = {}          // element references
    this._watchers = []   // all watchers as an array
    this._directives = [] // all directives
    this._childCtors = {} // inherit:true constructors
  
    // a flag to avoid this being observed
    this._isVue = true
  
    // events bookkeeping
    this._events = {}            // registered callbacks
    this._eventsCount = {}       // for $broadcast optimization
    this._eventCancelled = false // for event cancellation
  
    // fragment instance properties
    this._isFragment = false
    this._fragmentStart =    // @type {CommentNode}
    this._fragmentEnd = null // @type {CommentNode}
  
    // lifecycle state
    this._isCompiled =
    this._isDestroyed =
    this._isReady =
    this._isAttached =
    this._isBeingDestroyed = false
    this._unlinkFn = null
  
    // context: the scope in which the component was used,
    // and the scope in which props and contents of this
    // instance should be compiled in.
    this._context =
      options._context ||
      options._parent
  
    // push self into parent / transclusion host
    if (this.$parent) {
      this.$parent.$children.push(this)
    }
  
    // props used in v-repeat diffing
    this._reused = false
    this._staggerOp = null
  
    // merge options.
    options = this.$options = mergeOptions(
      this.constructor.options,
      options,
      this
    )
  
    // initialize data as empty object.
    // it will be filled up in _initScope().
    this._data = {}
  
    // initialize data observation and scope inheritance.
    this._initScope()
  
    // setup event system and option events.
    this._initEvents()
  
    // call created hook
    this._callHook('created')
  
    // if `el` option is passed, start compilation.
    if (options.el) {
      this.$mount(options.el)
    }
  }
  