diff --git a/src/classic/class/ReactClass.js b/src/classic/class/ReactClass.js index 002790a61f..f02a919ef0 100644 --- a/src/classic/class/ReactClass.js +++ b/src/classic/class/ReactClass.js @@ -895,8 +895,10 @@ var ReactClass = { // Legacy hook Constructor.type = Constructor; if (__DEV__) { - if (Object.defineProperty) { + try { Object.defineProperty(Constructor, 'type', typeDeprecationDescriptor); + } catch (x) { + // IE will fail on defineProperty (es5-shim/sham too) } } diff --git a/src/modern/class/ReactComponent.js b/src/modern/class/ReactComponent.js index ce1b4a7bbe..a2f2ded202 100644 --- a/src/modern/class/ReactComponent.js +++ b/src/modern/class/ReactComponent.js @@ -86,14 +86,14 @@ ReactComponent.prototype.forceUpdate = function(callback) { * modern base class. Instead, we define a getter that warns if it's accessed. */ if (__DEV__) { - if (Object.defineProperty) { - var deprecatedAPIs = { - getDOMNode: 'getDOMNode', - isMounted: 'isMounted', - replaceState: 'replaceState', - setProps: 'setProps' - }; - var defineDeprecationWarning = function(methodName, displayName) { + var deprecatedAPIs = { + getDOMNode: 'getDOMNode', + isMounted: 'isMounted', + replaceState: 'replaceState', + setProps: 'setProps' + }; + var defineDeprecationWarning = function(methodName, displayName) { + try { Object.defineProperty(ReactComponent.prototype, methodName, { get: function() { warning( @@ -104,11 +104,13 @@ if (__DEV__) { return undefined; } }); - }; - for (var methodName in deprecatedAPIs) { - if (deprecatedAPIs.hasOwnProperty(methodName)) { - defineDeprecationWarning(methodName, deprecatedAPIs[methodName]); - } + } catch (x) { + // IE will fail on defineProperty (es5-shim/sham too) + } + }; + for (var methodName in deprecatedAPIs) { + if (deprecatedAPIs.hasOwnProperty(methodName)) { + defineDeprecationWarning(methodName, deprecatedAPIs[methodName]); } } }