code: function Vue(options) {
      let instance = Object.assign({}, options, observableComp.methods, watchComp.methods);
      instance.created = observableComp.created;
      instance.$destroy = observableComp.detached;
  
      // do not call setData API as for it's only an observable data instance, no view
      instance.__setViewData = () => {};
      // do not initialize computed props when created
      instance.__lazyInitCompute = true;
      instance.__proxyArrayApis = proxyArrayApis;
  
      // avoid methods defined on methods, so here pass `true`
      observableComp.$init.call(instance, true);
      watchComp.$init.call(instance, true);
  
      // init inner data get/set listener
      instance.__onDataGet = handleDataGetSet.bind(instance, true);
      instance.__onDataSet = handleDataGetSet.bind(instance, false);
  
      instance.created();
  
      // define observable data and exported on `_data` attribute (Vuex need it)
      let data = {};
      let rawData = options && options.data;
      if (rawData) {
          let def = {};
          Object.keys(rawData).forEach(k => {
              let descriptor = Object.getOwnPropertyDescriptor(instance, k);
              def[k] = descriptor;
          });
          Object.defineProperties(data, def);
      }
      instance._data = data;
  
      return instance;
  }
docs: /* eslint-disable fecs-prefer-class 
  Create fake Vue context
  
  @param {Object} options the vue instance options
  @return {Object}