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:
Daniel Tschinder
2016-08-23 21:08:44 +02:00
committed by Henry Zhu
parent 2a4186faf3
commit 10cd6519d8
28 changed files with 87 additions and 71 deletions

View File

@@ -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