diff --git a/src/core/ReactElement.js b/src/core/ReactElement.js index 5d529c573c..dd7c86ba31 100644 --- a/src/core/ReactElement.js +++ b/src/core/ReactElement.js @@ -120,12 +120,16 @@ var ReactElement = function(type, key, ref, owner, context, props) { this.props = props; }; +// We intentionally don't expose the function on the constructor property. +// ReactElement should be indistinguishable from a plain object. +ReactElement.prototype = { + _isReactElement: true +}; + if (__DEV__) { defineMutationMembrane(ReactElement.prototype); } -ReactElement.prototype._isReactElement = true; - ReactElement.createElement = function(type, config, children) { var propName; diff --git a/src/core/__tests__/ReactElement-test.js b/src/core/__tests__/ReactElement-test.js index ebce1faea6..74bfa726af 100644 --- a/src/core/__tests__/ReactElement-test.js +++ b/src/core/__tests__/ReactElement-test.js @@ -402,4 +402,10 @@ describe('ReactElement', function() { expect(instance.getDOMNode().tagName).toBe('DIV'); }); + it('is indistinguishable from a plain object', function() { + var element = React.createElement('div', { className: 'foo' }); + var object = {}; + expect(element.constructor).toBe(object.constructor); + }); + });