Merge pull request #3017 from syranide/trydefine

Try/catch property deprecation warnings to support IE8
This commit is contained in:
Andreas Svensson
2015-02-02 21:26:18 +01:00
2 changed files with 18 additions and 14 deletions
+3 -1
View File
@@ -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)
}
}
+15 -13
View File
@@ -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]);
}
}
}