2013-08-19 34 views
2

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

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的新实例时,是不是应该继承所有的方法?

回答

6

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

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

如果要定义自己的构造函数,你可以这样创建“类方法”(我个人会毫不犹豫地给他们打电话说,但不管):

function MyConstructor() { 
    // ... 
} 

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

然后MyConstructor.someMethod()调用,功能独立的你的班级的任何特定实例。

+0

也许rhis链接是有帮助的:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date –

+0

@ChristianKuetbach不,不是真的。我认为这是一个通用的JavaScript问题,碰巧涉及“日期”。你可以回答这个问题,而不必提及“日期”。 – canon

+0

如果是关于Date的问题,请注意ie8中不支持'now'。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FDate%2Fnow –

3

“静态”与“非静态”是放置它的一种方式;还有“对象方法”与“类方法”。您在Date上呼叫now(),而不是对象。

now()Date类的工厂方法,创建并返回一个对象 - 在这种情况下,一个Date表示当now()被称为力矩。

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

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

+0

所以Date.now()是一个构造函数? – user2316667

+0

从技术上讲,没有。在内部,将其视为调用构造函数来创建Date对象,然后将其返回给您。 –

+0

根据user1477388,Date.now()实际上只返回一个整数。但根据文档,它创建一个新的Date对象并使用getTime返回。 – user2316667

2

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

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

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

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

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

Ref。Date.Now()

参考。 dateObj.getTime()

+0

感谢您的澄清。我完全忘记了日期对象不会返回最新的时间。 – user2316667