Date.getTime()v.s. Date.now()

时间:2013-08-19 20:31:37

标签: 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'

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

3 个答案:

答案 0 :(得分:8)

构造函数对象的属性与构造函数对象原型的属性之间存在差异。 “now”属性是Date构造函数本身的属性,而不是Date.prototype的属性。这是“getTime”的相反情况。

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

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

function MyConstructor() {
  // ...
}

MyConstructor.someMethod = function() {
  // ...
}

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

答案 1 :(得分:4)

“静态”与“非静态”是一种表达方式;也是“对象方法”与“类方法”。您在now() 上致电Date,而非对象。

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

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

类级别方法仍然存在,它们不会被添加到对象实例中。因此,当您创建Date实例时,是的,所有对象方法都是继承的。类级方法不是。

答案 2 :(得分:2)

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

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

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

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

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

参考。 Date.Now()

参考。 dateObj.getTime()