@samitouri / QOS-React-2 / commits / 0a1cd56ead

Try/catch property deprecation warnings to support IE8

syranide committed Feb 2, 2015 at 21:00 UTC 0a1cd56ead184554c75863a9661f26b9b94f2588
2 files changed +18 -14
src/classic/class/ReactClass.js
+3 -1
@@ -895,8 +895,10 @@ var ReactClass = {
895 // Legacy hook
896 Constructor.type = Constructor;
897 if (__DEV__) {
898 - if (Object.defineProperty) {
898 + try {
899 Object.defineProperty(Constructor, 'type', typeDeprecationDescriptor);
900 + } catch (x) {
901 + // IE will fail on defineProperty (es5-shim/sham too)
902 }
903 }
904
src/modern/class/ReactComponent.js
+15 -13
@@ -86,14 +86,14 @@ ReactComponent.prototype.forceUpdate = function(callback) {
86 * modern base class. Instead, we define a getter that warns if it's accessed.
87 */
88 if (__DEV__) {
89 - if (Object.defineProperty) {
90 - var deprecatedAPIs = {
91 - getDOMNode: 'getDOMNode',
92 - isMounted: 'isMounted',
93 - replaceState: 'replaceState',
94 - setProps: 'setProps'
95 - };
96 - var defineDeprecationWarning = function(methodName, displayName) {
89 + var deprecatedAPIs = {
90 + getDOMNode: 'getDOMNode',
91 + isMounted: 'isMounted',
92 + replaceState: 'replaceState',
93 + setProps: 'setProps'
94 + };
95 + var defineDeprecationWarning = function(methodName, displayName) {
96 + try {
97 Object.defineProperty(ReactComponent.prototype, methodName, {
98 get: function() {
99 warning(
@@ -104,11 +104,13 @@ if (__DEV__) {
104 return undefined;
105 }
106 });
107 - };
108 - for (var methodName in deprecatedAPIs) {
109 - if (deprecatedAPIs.hasOwnProperty(methodName)) {
110 - defineDeprecationWarning(methodName, deprecatedAPIs[methodName]);
111 - }
107 + } catch (x) {
108 + // IE will fail on defineProperty (es5-shim/sham too)
109 + }
110 + };
111 + for (var methodName in deprecatedAPIs) {
112 + if (deprecatedAPIs.hasOwnProperty(methodName)) {
113 + defineDeprecationWarning(methodName, deprecatedAPIs[methodName]);
114 }
115 }
116 }