我注意到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实例时,不应该继承所有方法吗?
它是构造函数对象的属性与构造函数对象的原型的属性之间的区别."now"属性是Date构造函数本身的属性,而不是属性Date.prototype.这是"getTime"的相反情况.
在语义上它是有道理的:"now"的概念独立于任何特定的日期实例."getTime"方法用于报告特定日期实例实际表示的日期的时间戳.
如果你要定义自己的构造函数,你可以创建"类方法"(我个人会毫不犹豫地称之为,但无论如何)像这样:
function MyConstructor() {
// ...
}
MyConstructor.someMethod = function() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后MyConstructor.someMethod()调用该函数独立于您的类的任何特定实例.
“静态”与“非静态”是一种表达方式;还有“对象方法”与“类方法”。您调用now()的是Date 类,而不是对象。
now()是类的工厂方法Date,创建并返回一个对象 - 在这种情况下,Date代表now()被调用的时刻。
getTime()需要一个现有Date对象 - 它为您提供该对象的属性(在本例中为 unix 时间表示)。
类级方法保持不变,它们不会被添加到对象实例中。所以当你创建一个Date实例时,是的,所有的对象方法都是继承的。类级别的方法不是。
我不知道这是否能回答你的问题,但我认为这两种方法做不同的事情。
Date.now() 获取“1970 年 1 月 1 日午夜与当前日期和时间之间的毫秒数。”
而dateObj.getTime()“返回 1970 年 1 月 1 日午夜与 Date 对象中的时间值之间的毫秒数。”
dateObj.getTime() 要求您使用对象引用,因为它使用它来获取“1970 年 1 月 1 日午夜与 Date 对象中的时间值之间的差异”。
您不需要使用该Date.now()方法引用对象,因为它不使用任何对象,它只是获取“1970 年 1 月 1 日午夜与当前日期和时间之间的毫秒数”。
参考 日期.现在()
| 归档时间: |
|
| 查看次数: |
6023 次 |
| 最近记录: |