这是一个看似合乎逻辑的选择:
class MyDate extends Date {
constructor(dateTimeStr: string) {
super(dateTimeStr);
console.log(this, typeof(this));
this.setTime(this.getTime() + 1000);
}
}
但事实证明,显然,因为它作为函数super调用,而不是作为类调用,所以它返回一个字符串。因此,它变成了一个字符串。DateDate()new DateDatethis
告诉我您通常如何延长日期。
如果使用 ES6 语法,则提供的代码示例有效。在这种情况下与打字稿的区别仅在于没有传递给构造函数的参数类型。
这是可能的,因为规范部分中的类
Date具有以下几行:为确保一切正常,您可以使用示例:
为什么它不能在打字稿中工作,而需要手动实施?
问题出在 internal slot
[[DateValue]]上,所有函数都在内部访问它Date。因此,下面的例子会抛出一个异常:
进入打字稿的实现有点复杂
在这种情况下,它会覆盖
this将从构造函数返回的 ,并且_super.call(this, dateTimeStr)在这种情况下调用等同于调用Date.call(this, dateTimeStr),它只会返回一个字符串。如何决定?
如果您在其中指定 ES6 和更高版本,编译密钥
-target可以帮助解决这个问题。在手动实施的情况下,类似的问题建议创建一个 Date 并更改其原型,如下所示: