Fix class inheritance in IE <=10 (T3041) (#3527)
* Fix class inheritance in IE9 & IE10 (T3041) Internet Explorer 9&10 do not support __proto__ at all, don't have Object.setPrototypeOf(), but have Object.getPrototypeOf(). Because of this setting the prototype is not possible, which makes the babelHelpers.inherits() function to set __proto__ although not supported. Afterwards Object.getPrototypeOf() is used, but this one is not respecting the "custom" property __proto__ that we set. The solution is to check for __proto__ first and afterwards fallback to Object.getPrototypeOf(). * Do the same logic in babel-helper-replace-supers * Fix tests * Extract creation of prototype nodes to small helper
This commit is contained in:
committed by
Henry Zhu
parent
2a4186faf3
commit
10cd6519d8
@@ -345,9 +345,13 @@ export default class ClassTransformer {
|
||||
}
|
||||
} else {
|
||||
bareSuperNode = optimiseCall(
|
||||
t.callExpression(
|
||||
t.memberExpression(t.identifier("Object"), t.identifier("getPrototypeOf")),
|
||||
[this.classRef]
|
||||
t.logicalExpression(
|
||||
"||",
|
||||
t.memberExpression(this.classRef, t.identifier("__proto__")),
|
||||
t.callExpression(
|
||||
t.memberExpression(t.identifier("Object"), t.identifier("getPrototypeOf")),
|
||||
[this.classRef]
|
||||
)
|
||||
),
|
||||
t.thisExpression(),
|
||||
bareSuperNode.arguments
|
||||
|
||||
Reference in New Issue
Block a user