Cannot use subclass declared with constructor using rest parameter syntax
foo.js
class SuperClass {
constructor(a) {
console.log('Constructing a SuperClass', a);
}
}
class SubClass extends SuperClass {
constructor(...args) {
super(...args);
console.log('Constructing a SubClass', args);
}
}
var subInstance = new SubClass(17); // uh-oh
Output from buble foo.js > out.js:
var SuperClass = function SuperClass(a) {
console.log('Constructing a SuperClass', a);
};
var SubClass = (function (SuperClass) {
function SubClass() {
var args = [], len = arguments.length;
while ( len-- ) args[ len ] = arguments[ len ];
SuperClass.apply.call(this, void 0, args);
console.log('Constructing a SubClass', args);
}
if ( SuperClass ) SubClass.__proto__ = SuperClass;
SubClass.prototype = Object.create( SuperClass && SuperClass.prototype );
SubClass.prototype.constructor = SubClass;
return SubClass;
}(SuperClass));
var subInstance = new SubClass(17); // uh-oh
Running node out.js breaks with
TypeError: Function.prototype.apply was called on #<SubClass>, which is a object and not a function
at new SubClass (/home/david/workspace/buble-super-bug/out.js:10:22)
at Object.<anonymous> (/home/david/workspace/buble-super-bug/out.js:21:19)
This line definitely looks odd:
SuperClass.apply.call(this, void 0, args);