defineMembraneProperty = function(membrane, prototype, key) {
    Object.defineProperty(membrane, key, {

      configurable: false,
      enumerable: true,

      get: function() {
        if (this === membrane) {
          // We're allowed to access the prototype directly.
          return prototype[key];
        }
        issueMembraneWarning(this, key);

        var realValue = this.__realComponentInstance[key];
        // If the real value is a function, we need to provide a wrapper that
        // disables nested warnings. The properties type and constructors are
        // expected to the be constructors and therefore is often use with an
        // equality check and we shouldn't try to rebind those.
        if (typeof realValue === 'function' &&
            key !== 'type' &&
            key !== 'constructor') {
          return wrapInMembraneFunction(realValue, this);
        }
        return realValue;
      },

      set: function(value) {
        if (this === membrane) {
          // We're allowed to set a value on the prototype directly.
          prototype[key] = value;
          return;
        }
        issueMembraneWarning(this, key);
        this.__realComponentInstance[key] = value;
      }

    });
  }
By getting this function, you've already received a warning. The
internals of this function will likely cause more warnings. To avoid
Spamming too much we disable any warning triggered inside of this
stack.