docs: function(type, key, ref, owner, context, props) {
    // Built-in properties that belong on the element
    this.type = type;
    this.key = key;
    this.ref = ref;
  
    // Record the component responsible for creating this element.
    this._owner = owner;
  
    // TODO: Deprecate withContext, and then the context becomes accessible
    // through the owner.
    this._context = context;
  
    if ("production" !== process.env.NODE_ENV) {
      // The validation flag and props are currently mutative. We put them on
      // an external backing store so that we can freeze the whole object.
      // This can be replaced with a WeakMap once they are implemented in
      // commonly used development environments.
      this._store = {props: props, originalProps: assign({}, props)};
  
      // To make comparing ReactElements easier for testing purposes, we make
      // the validation flag non-enumerable (where possible, which should
      // include every environment we run tests in), so the test framework
      // ignores it.
      try {
        Object.defineProperty(this._store, 'validated', {
          configurable: false,
          enumerable: false,
          writable: true
        });
      } catch (x) {
      }
      this._store.validated = false;
  
      // We're not allowed to set props directly on the object so we early
      // return and rely on the prototype membrane to forward to the backing
      // store.
      if (useMutationMembrane) {
        Object.freeze(this);
        return;
      }
    }
  
    this.props = props;
  }