From 8a4ab088e4a78feb6f12476b56be829388ba6735 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Mon, 19 Jun 2017 11:58:49 -0400 Subject: [PATCH] create and use a inheritsLoose helper --- packages/babel-helpers/src/helpers.js | 10 ++++++++++ .../src/vanilla.js | 2 +- .../loose-classCallCheck/with-superClass/expected.js | 6 +++--- .../fixtures/loose/accessing-super-class/expected.js | 2 +- .../loose/accessing-super-properties/expected.js | 2 +- .../loose/calling-super-properties/expected.js | 2 +- .../loose/super-class-id-member-expression/expected.js | 4 ++-- .../test/fixtures/loose/super-class/expected.js | 2 +- 8 files changed, 20 insertions(+), 10 deletions(-) diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 3c5194ac11..2779c54e91 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -377,6 +377,16 @@ helpers.inherits = template(` }) `); +helpers.inheritsLoose = template(` + (function (subClass, superClass) { + subClass.prototype = Object.create(superClass && superClass.prototype); + subClass.prototype.constructor = subClass; + if (superClass) { + subClass.__proto__ = superClass; + } + }) +`); + helpers.instanceof = template(` (function (left, right) { if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { diff --git a/packages/babel-plugin-transform-es2015-classes/src/vanilla.js b/packages/babel-plugin-transform-es2015-classes/src/vanilla.js index 2f1d98f444..af8cb8e99b 100644 --- a/packages/babel-plugin-transform-es2015-classes/src/vanilla.js +++ b/packages/babel-plugin-transform-es2015-classes/src/vanilla.js @@ -563,7 +563,7 @@ export default class ClassTransformer { // any properties can be assigned to the prototype. this.pushedInherits = true; this.body.unshift(t.expressionStatement(t.callExpression( - this.file.addHelper("inherits"), + this.isLoose ? this.file.addHelper("inheritsLoose") : this.file.addHelper("inherits"), [this.classRef, this.superName] ))); } diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose-classCallCheck/with-superClass/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose-classCallCheck/with-superClass/expected.js index 7c079574a6..e473ba9a82 100644 --- a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose-classCallCheck/with-superClass/expected.js +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose-classCallCheck/with-superClass/expected.js @@ -1,9 +1,9 @@ -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } +function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass && superClass.prototype); subClass.prototype.constructor = subClass; if (superClass) { subClass.__proto__ = superClass; } } let B = function B() {}; let A = function (_B) { - _inherits(A, _B); + _inheritsLoose(A, _B); function A(track) { if (track !== undefined) { @@ -15,4 +15,4 @@ let A = function (_B) { } return A; -}(B); \ No newline at end of file +}(B); diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/accessing-super-class/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/accessing-super-class/expected.js index 9d90b4e72d..697df5c608 100644 --- a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/accessing-super-class/expected.js +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/accessing-super-class/expected.js @@ -1,5 +1,5 @@ var Test = function (_Foo) { - babelHelpers.inherits(Test, _Foo); + babelHelpers.inheritsLoose(Test, _Foo); function Test() { var _Foo$prototype$test, _Foo$prototype$test2; diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/accessing-super-properties/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/accessing-super-properties/expected.js index 76b6773453..03969d0f8d 100644 --- a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/accessing-super-properties/expected.js +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/accessing-super-properties/expected.js @@ -1,5 +1,5 @@ var Test = function (_Foo) { - babelHelpers.inherits(Test, _Foo); + babelHelpers.inheritsLoose(Test, _Foo); function Test() { var _this = _Foo.call(this) || this; diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/calling-super-properties/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/calling-super-properties/expected.js index a5e14ee06f..3ef936da91 100644 --- a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/calling-super-properties/expected.js +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/calling-super-properties/expected.js @@ -1,5 +1,5 @@ var Test = function (_Foo) { - babelHelpers.inherits(Test, _Foo); + babelHelpers.inheritsLoose(Test, _Foo); function Test() { var _this = _Foo.call(this) || this; diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/super-class-id-member-expression/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/super-class-id-member-expression/expected.js index 5838f30e79..fad14f464e 100644 --- a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/super-class-id-member-expression/expected.js +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/super-class-id-member-expression/expected.js @@ -1,5 +1,5 @@ var BaseController = function (_Chaplin$Controller) { - babelHelpers.inherits(BaseController, _Chaplin$Controller); + babelHelpers.inheritsLoose(BaseController, _Chaplin$Controller); function BaseController() { return _Chaplin$Controller.apply(this, arguments) || this; @@ -9,7 +9,7 @@ var BaseController = function (_Chaplin$Controller) { }(Chaplin.Controller); var BaseController2 = function (_Chaplin$Controller$A) { - babelHelpers.inherits(BaseController2, _Chaplin$Controller$A); + babelHelpers.inheritsLoose(BaseController2, _Chaplin$Controller$A); function BaseController2() { return _Chaplin$Controller$A.apply(this, arguments) || this; diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/super-class/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/super-class/expected.js index bae3ab819e..d9e146771b 100644 --- a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/super-class/expected.js +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/super-class/expected.js @@ -1,5 +1,5 @@ var Test = function (_Foo) { - babelHelpers.inherits(Test, _Foo); + babelHelpers.inheritsLoose(Test, _Foo); function Test() { return _Foo.apply(this, arguments) || this;