From dafd05f5b444db3c9d8818afd70d06c2979d0d55 Mon Sep 17 00:00:00 2001 From: Ali Taheri Date: Tue, 24 May 2016 16:26:19 +0430 Subject: [PATCH 1/2] Avoid directly calling hasOwnProperty --- src/isomorphic/classic/element/ReactElement.js | 7 ++++--- .../classic/element/__tests__/ReactElement-test.js | 6 ++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/isomorphic/classic/element/ReactElement.js b/src/isomorphic/classic/element/ReactElement.js index 40c1c7fc29d5..b0a6648870de 100644 --- a/src/isomorphic/classic/element/ReactElement.js +++ b/src/isomorphic/classic/element/ReactElement.js @@ -15,6 +15,7 @@ var ReactCurrentOwner = require('ReactCurrentOwner'); var warning = require('warning'); var canDefineProperty = require('canDefineProperty'); +var hasOwnProperty = Object.prototype.hasOwnProperty; // The Symbol used to tag the ReactElement type. If there is no native Symbol // nor polyfill, then a plain number is used for performance. @@ -137,9 +138,9 @@ ReactElement.createElement = function(type, config, children) { 'React.createElement(...): Expected props argument to be a plain object. ' + 'Properties defined in its prototype chain will be ignored.' ); - ref = !config.hasOwnProperty('ref') || + ref = !hasOwnProperty.call(config, 'ref') || Object.getOwnPropertyDescriptor(config, 'ref').get ? null : config.ref; - key = !config.hasOwnProperty('key') || + key = !hasOwnProperty.call(config, 'key') || Object.getOwnPropertyDescriptor(config, 'key').get ? null : '' + config.key; } else { ref = config.ref === undefined ? null : config.ref; @@ -149,7 +150,7 @@ ReactElement.createElement = function(type, config, children) { source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object for (propName in config) { - if (config.hasOwnProperty(propName) && + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { props[propName] = config[propName]; } diff --git a/src/isomorphic/classic/element/__tests__/ReactElement-test.js b/src/isomorphic/classic/element/__tests__/ReactElement-test.js index fac4c6c416f2..9e6182cb7a78 100644 --- a/src/isomorphic/classic/element/__tests__/ReactElement-test.js +++ b/src/isomorphic/classic/element/__tests__/ReactElement-test.js @@ -138,6 +138,12 @@ describe('ReactElement', function() { expect(element.props.foo).toBe(1); }); + it('does not fail if config has no prototype', function() { + var config = Object.create(null, {foo: {value: 1}}); + var element = React.createFactory(ComponentClass)(config); + expect(element.props.foo).toBe(1); + }); + it('warns if the config object inherits from any type other than Object', function() { spyOn(console, 'error'); React.createElement('div', {foo: 1}); From 5008615b7db405ae7078be1cf95b11501f5dab5b Mon Sep 17 00:00:00 2001 From: Ali Taheri Date: Tue, 24 May 2016 16:42:06 +0430 Subject: [PATCH 2/2] Fix failing test case --- src/isomorphic/classic/element/__tests__/ReactElement-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/isomorphic/classic/element/__tests__/ReactElement-test.js b/src/isomorphic/classic/element/__tests__/ReactElement-test.js index 9e6182cb7a78..011dbf9aa8b6 100644 --- a/src/isomorphic/classic/element/__tests__/ReactElement-test.js +++ b/src/isomorphic/classic/element/__tests__/ReactElement-test.js @@ -139,7 +139,7 @@ describe('ReactElement', function() { }); it('does not fail if config has no prototype', function() { - var config = Object.create(null, {foo: {value: 1}}); + var config = Object.create(null, {foo: {value: 1, enumerable: true}}); var element = React.createFactory(ComponentClass)(config); expect(element.props.foo).toBe(1); });