7

now() は Date オブジェクトからしか呼び出せないことに気付きました。getTime() は、date のインスタンスによってのみ呼び出すことができます。

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 の新しいインスタンスを作成する場合、すべてのメソッドを継承する必要はありませんか?

4

3 に答える 3

9

これは、コンストラクター オブジェクトのプロパティとコンストラクター オブジェクトのプロトタイプのプロパティの違いです。"now" プロパティは Date コンストラクタ自体のプロパティであり、 のプロパティではありませんDate.prototype。「getTime」とは逆の状況です。

意味的には理にかなっています。「今」の概念は、特定の日付インスタンスとは無関係です。「getTime」メソッドは、特定の日付インスタンスによって実際に表される日付のタイムスタンプを報告することを目的としています。

独自のコンストラクターを定義している場合は、次のように「クラス メソッド」を作成できます (個人的にはそのように呼ぶのはためらいますが、何でも構いません)。

function MyConstructor() {
  // ...
}

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

次にMyConstructor.someMethod()、クラスの特定のインスタンスとは無関係にその関数を呼び出します。

于 2013-08-19T20:34:25.460 に答える