2016-07-20 9 views
1

文字列値から新しい日付を作成するために、Dateを拡張しようとしています。これはコードです:JavaScriptの日付を延長して文字列から新しい日付を作成する

Date.prototype.stringToDate = function (date) { 

var aDate = date.split("/"); 
return new Date(aDate[2], (aDate[1] - 1), aDate[0]);  

} 

私はそれを呼び出すときに問題があります。例:

var date1 = Date.stringToDate(stringDate1); 

¿ ありがとうございます。

+0

何が問題になっていますか? –

+0

Date.stringToDateは関数ではありません... – MKP

+4

関数を 'prototype'に代入することによって、各' Date' *インスタンス*に 'stringToDate'関数があることを意図しています。しかし、実際の意図は、各インスタンスではなく、 'Date'型にバインドされた静的なファクトリ*関数を持つことです。代わりに 'Date.stringToDate = function(date){..}'を試してください。また、それを 'Date.fromString()'と命名することを検討してください。 – haim770

答えて

2

まず、protoptypeに関数を追加するので、Date自体ではなく、Dateのインスタンスに対してのみ使用できます。

Aコンストラクタ関数と2つの関数someFnがプロトタイプで定義され、someOtherFnAコンストラクタで定義されている例です。

function A() { 
 
} 
 

 
A.prototype.someFn = function() { 
 
    console.log('someFn'); 
 
}; 
 

 
A.someOtherFn = function() { 
 
    console.log('someOtherFn'); 
 
}; 
 

 
console.log('A.someFn', A.someFn); 
 
console.log('A.someOtherFn', A.someOtherFn); 
 

 
var a = new A(); 
 

 
console.log('a.someFn', a.someFn); 
 
console.log('a.someOtherFn', a.someOtherFn);

第二に、あなたは新しい日付があなたのためにうまくそれを解析しますが、このような機能を必要としません。

console.log(new Date('2016/03/24'));

[OK]を、私はあなたが形式24/03/2016の日付を持つようにしたいことがわかり、そうしてあなたは、いくつかの余分な機能を追加するかもしれませんが、私は日にそれを定義しません、組み込みオブジェクトを拡張することは悪いですそのようなオブジェクトのインターフェースが将来のブラウザのバージョンでどのように変化するか、またはサードパーティのスクリプトによって関数がオーバーライドされる可能性があることを決して知りません。

スタンドアロン機能として宣言し、必要に応じて使用することをお勧めします。何かが最初に短い場合は、stringToDate('24/03/2016')Date.stringToDate('24/03/2016')の間に大きな違いはありません。

関連する問題