7

我注意到 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 实例时,不应该继承所有方法吗?

4

3 回答 3

9

这是构造函数对象的属性和构造函数对象原型的属性之间的区别。“now”属性是 Date 构造函数本身的属性,而不是Date.prototype. “getTime”的情况正好相反。

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

如果您要定义自己的构造函数,则可以像这样创建“类方法”(我个人会犹豫叫它们,但无论如何):

function MyConstructor() {
  // ...
}

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

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

于 2013-08-19T20:34:25.460 回答
6

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

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

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

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

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

参考。日期。现在()

参考。dateObj.getTime()

于 2013-08-19T20:40:27.080 回答
5

“静态”与“非静态”是一种说法;还有“对象方法”与“类方法”。你调用now(),而不是对象。Date

now()Date类的工厂方法,创建并返回一个对象——在本例中,a表示被调用Date的时刻。now()

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

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

于 2013-08-19T20:37:46.507 回答