docs: function initExtend (Vue) {
  	  /**
  	   * Each instance constructor, including Vue, has a unique
  	   * cid. This enables us to create wrapped "child
  	   * constructors" for prototypal inheritance and cache them.
  	   */
  	  Vue.cid = 0;
  	  var cid = 1;
  	
  	  /**
  	   * Class inheritance
  	   */
  	  Vue.extend = function (extendOptions) {
  	    extendOptions = extendOptions || {};
  	    var Super = this;
  	    var isFirstExtend = Super.cid === 0;
  	    if (isFirstExtend && extendOptions._Ctor) {
  	      return extendOptions._Ctor
  	    }
  	    var name = extendOptions.name || Super.options.name;
  	    {
  	      if (!/^[a-zA-Z][\w-]*$/.test(name)) {
  	        warn(
  	          'Invalid component name: "' + name + '". Component names ' +
  	          'can only contain alphanumeric characaters and the hyphen.'
  	        );
  	        name = null;
  	      }
  	    }
  	    var Sub = function VueComponent (options) {
  	      this._init(options);
  	    };
  	    Sub.prototype = Object.create(Super.prototype);
  	    Sub.prototype.constructor = Sub;
  	    Sub.cid = cid++;
  	    Sub.options = mergeOptions(
  	      Super.options,
  	      extendOptions
  	    );
  	    Sub['super'] = Super;
  	    // allow further extension
  	    Sub.extend = Super.extend;
  	    // create asset registers, so extended classes
  	    // can have their private assets too.
  	    config._assetTypes.forEach(function (type) {
  	      Sub[type] = Super[type];
  	    });
  	    // enable recursive self-lookup
  	    if (name) {
  	      Sub.options.components[name] = Sub;
  	    }
  	    // keep a reference to the super options at extension time.
  	    // later at instantiation we can check if Super's options have
  	    // been updated.
  	    Sub.superOptions = Super.options;
  	    Sub.extendOptions = extendOptions;
  	    // cache constructor
  	    if (isFirstExtend) {
  	      extendOptions._Ctor = Sub;
  	    }
  	    return Sub
  	  };
  	}