0

我可以直接调用 Date 对象的 parse 方法,如下所示:

    alert(Date.parse("March 21, 2012"));

但是我不能这样做:

    alert(Date.getTime()); // TypeError: Date.getTime is not a function

这就是我让它工作的方式:

    alert(new Date().getTime()); // works well

那么为什么我不能像 Date.parse() 那样直接调用 Date.getTime() 呢?

基本问题:我写了一个类,我想直接使用它的一些方法,比如上面的 Date.parse() 。

4

4 回答 4

6

getTimeis in Date.prototype,在构造new Date()对象时使用。

parseDate本身,因此被直接调用而不是从构造的对象中调用。

这是一篇关于 JavaScript 原型的文章,供您阅读。

于 2012-08-20T00:55:02.290 回答
3

在面向对象编程中,前者称为静态方法,而后者称为实例方法。实例方法要求对象的实例已经实例化(因此new Date()调用是必要的)。静态方法没有这个要求。

基本问题:我写了一个类,我想直接使用它的一些方法,比如上面的 Date.parse() 。

编写完类后,要添加静态方法,您需要执行以下操作:

MyClass.myStaticFunction = function() {
    // Contents go here.
}
于 2012-08-20T00:54:53.777 回答
1

正如其他人所指出的,JavaScript 使用原型来定义实例方法。但是,您可以定义静态方法,如下所示。我不是想在Date这里定义整个对象,而是展示它的实例和静态函数是如何定义的。

// constructor defined here
function Date() {
    // constructor logic here
}

// this is an instance method
DateHack.prototype.getTime = function() {
    return this.time_stamp;
}

// this method is static    
Date.parse = function(value) {
    // do some parsing
    return new Date(args_go_here);
}
于 2012-08-20T00:59:22.307 回答
1
function Class() {
    this.foo = function() { return 123; };
}
Class.bar = function() { return 321; };

Class.bar(); // 321

( new Class ).foo(); // 123
于 2012-08-20T01:13:12.890 回答