Date.getTime 不是构造函数

Date.getTime is not a constructor

在函数中我有一行:

const currentTime = new Date.getTime();

代码编译得很好。 此外,ESLint 既不显示警告也不显示 错误。
但是当我 运行 代码时,我得到一个警告框,给出令人困惑的信息 留言 Date.getTime is not a constructor.

这里有什么问题?


我注意到如果我不调用该函数就没有错误 包含上面的行。

以下堆栈代码段重现了错误。

function rightNow() {
  const currentTime = new Date.getTime();
  return currentTime;
}
console.log(rightNow().toString());
// ^^ No error if I comment out the previous line! ^^
.as-console-wrapper { max-height: 100% !important; top: 0; }

1。快速修复

直接在new Date后面加上括号即可:

const currentTime = new Date().getTime();

2。说明

Date.getTime is not a constructor

如果编译器是一个有思想的人,它可以响应 片段

new Date.getTime();

啊哈!我想我明白你的意思了:有一个名为 class 的 Date.getTime 现在你想调用默认构造函数 创建一个新对象:new Date.getTime(),对吗?
抱歉,我找不到任何这样的构造函数。

我能听到你——程序员——尖叫 不!!那是不是 我的意思是! (愚蠢的✴!☠#@☠$%编译器!)

在你冷静下来恢复正常后 血压,你可以 - 耐心地 - 尝试这样的事情:

编译器先生,我们显然走错了路——我从来没有 意在伤害你的感情。 我想要的是:请创建一个新的 Date 对象,然后调用 该新创建对象的 getTime() 方法。
你看我这样说,看看你能不能更明白我的意思 观点?

const currentTime = (new Date).getTime();

Missing '()' invoking a constructor new-parens

编译先生的回复:

Missing '()' invoking a constructor  new-parens

或者——用更人性化的语言。
好的!所以你想创建一个新的 Date 对象? 你想在那个对象上 .getTime()? 没关系。 – 除了你忘了告诉我哪个 你想让我使用的构造函数。它是默认构造函数吗? 或者其他一些构造函数?
既然你不告诉我,我就假设你 要我使用 default 构造函数。

但是下次你问我的时候你会考虑更明确一点吗 做这样的事情?
这样我就不必对你的意思做出有根据的猜测。

叹息辞职后,你——程序员——再试一次:

const currentTime = (new Date()).getTime();

终于——编译先生没有抱怨了!

编译先生这次沉默回应,很好 消息! – 沉默回应表明 Compiler 先生处于最佳状态 心情

不过,你是一个人类而不是编译器,所以你可以想象 编译器先生说:
好的。所以 (new Date()).getTime() 意味着你想创建一个新的 Date对象使用默认构造函数,然后调用 getTime() 在该对象上。一切都很好。我没有怨言。

但是因为你是一个非常敏感的人,你无法控制自己 问:

好!我很高兴我们最终就此达成一致。但是有没有什么 还在想吗?原谅我多问

想象一下编译器先生回应:

没有没有。你的代码是有道理的。没关系。真的是。 但是,既然你一直唠叨我——写(new Date())就好了。 没有什么问题。但你并不需要周围 括弧。一旦你写 new Date() 然后我明白你 想要创建一个 Date 对象,即使您随后对该对象调用了一个方法 对象.

我不你懂的!

结语

作为一般规则,运行时错误——就像这个问题——通常是 比编译器错误更难理解和调试 警告。 这时 Stack Overflow question-and-answer 可能会有所帮助。 正如评论中所指出的,一个更短的替代方案 new Date().getTime() 就是简单明了的 Date.now().

这是没有错误的堆栈代码段。

function rightNow() {
  const currentTime = Date.now();
  return currentTime;
}
console.log(rightNow().toString());
.as-console-wrapper { max-height: 100% !important; top: 0; }

参考