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

getTimeこれは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
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 に答える
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 に答える