是的,这个问题是关于使用Es5扩展使用class
关键字声明的本机Es6类,并且 not 已转换为Es5和not the other way around。
为什么有人这样做?我有一个库需要严格的Es5,但该库的用户可能正在使用Es6本机类,至少可能在开发期间没有使用转换器。现在,该库包含一个功能,其中给定了这样一个类,它需要动态创建该类的子类,但不使用class
关键字,更具体地说,不使用super
关键字。但是,正确的子类实现需要调用超级构造函数,在这种情况下,它将是Es6类的构造函数,而在Es6中将不使用super
关键字。
从Es5的角度来看,Es6基类是一个简单的函数(构造函数),但是我没有看到如何正确调用该函数的方法。
有没有办法在不使用eval
的情况下在Es5兼容的源代码文件中调用Es6构造函数 - 就像编程一样?
//Es6 Code class declaration
class BaseClass {
constructor(foo){
this.foo = foo;
}
}
// "Typescript-Es5-extends-style" helper method
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
// subclass declaration
var SubClass = (function (_super) {
__extends(SubClass, _super);
function SubClass() {
// Error: super keyword unexpected
//super();
// Error: Class constructor BaseClass cannot be invoked without 'new'
// BaseClass();
// return Function.prototype.bind.apply(_super, [this].concat(arguments))();
return _super.apply(this, arguments) || this;
}
return SubClass;
}(BaseClass));
// Instantiation
// won't work (Class constructor BaseClass cannot be invoked without 'new')
new SubClass();