From 0a1cd56ead184554c75863a9661f26b9b94f2588 Mon Sep 17 00:00:00 2001 From: syranide Date: Mon, 2 Feb 2015 21:00:04 +0100 Subject: [PATCH] Try/catch property deprecation warnings to support IE8 --- src/classic/class/ReactClass.js | 4 +++- src/modern/class/ReactComponent.js | 28 +++++++++++++++------------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/classic/class/ReactClass.js b/src/classic/class/ReactClass.js index aa0f379bf9..e32d41efcb 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 933f8913c4..8f431b0aae 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]); } } }