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