Date.getTime()vs Date.now()

use*_*667 5 javascript

我注意到now()只能由Date对象调用.getTime()只能由日期实例调用.

var dd1 = new Date();

//console.log(dd1.now()); //Throws error -> TypeError: Object Mon Aug 19 2013 16:28:03 GMT-0400 (Eastern Daylight Time) has no method 'now'
console.log(dd1.getTime());

console.log(Date.now());
//console.log(Date.getTime()); //Throws error ->TypeError: Object function Date() { [native code] } has no method 'getTime'
Run Code Online (Sandbox Code Playgroud)

这种差异有正式名称吗?这是"静态"和"非静态"之间的区别吗?当我创建一个新的Date实例时,不应该继承所有方法吗?

Poi*_*nty 9

它是构造函数对象的属性与构造函数对象的原型的属性之间的区别."now"属性是Date构造函数本身的属性,而不是属性Date.prototype.这是"getTime"的相反情况.

在语义上它是有道理的:"now"的概念独立于任何特定的日期实例."getTime"方法用于报告特定日期实例实际表示的日期的时间戳.

如果你要定义自己的构造函数,你可以创建"类方法"(我个人会毫不犹豫地称之为,但无论如何)像这样:

function MyConstructor() {
  // ...
}

MyConstructor.someMethod = function() {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

然后MyConstructor.someMethod()调用该函数独立于您的类的任何特定实例.


Pau*_*oub 5

“静态”与“非静态”是一种表达方式;还有“对象方法”与“类方法”。您调用now()的是Date ,而不是对象。

now()是类的工厂方法Date,创建并返回一个对象 - 在这种情况下,Date代表now()被调用的时刻。

getTime()需要一个现有Date对象 - 它为您提供该对象的属性(在本例中为 unix 时间表示)。

类级方法保持不变,它们不会被添加到对象实例中。所以当你创建一个Date实例时,是的,所有的对象方法都是继承的。类级别的方法不是。


use*_*388 5

我不知道这是否能回答你的问题,但我认为这两种方法做不同的事情。

Date.now() 获取“1970 年 1 月 1 日午夜与当前日期和时间之间的毫秒数。”

dateObj.getTime()“返回 1970 年 1 月 1 日午夜与 Date 对象中的时间值之间的毫秒数。”

dateObj.getTime() 要求您使用对象引用,因为它使用它来获取“1970 年 1 月 1 日午夜与 Date 对象中的时间值之间的差异”。

您不需要使用该Date.now()方法引用对象,因为它不使用任何对象,它只是获取“1970 年 1 月 1 日午夜与当前日期和时间之间的毫秒数”。

参考 日期.现在()

参考 dateObj.getTime()