2016-07-20 9 views
1

Ich versuche, Datum zu erweitern, um ein neues Datum aus einem Zeichenfolgewert zu erstellen. Dies ist der Code:Erweitern von Javascript Date, um ein neues Datum aus einer Zeichenfolge zu erstellen

Date.prototype.stringToDate = function (date) { 

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

} 

Ich habe Probleme in der Zeit, um es zu nennen. Beispiel:

var date1 = Date.stringToDate(stringDate1); 

Was ist das Problem? Vielen Dank im Voraus.

+0

Was ist das Problem, das Sie haben? –

+0

Date.StringToDate ist keine Funktion ... – MKP

+4

Indem Sie Ihre Funktion dem 'Prototyp' zuweisen, beabsichtigen Sie, dass jede 'Date' * Instanz * eine' stringToDate' Funktion hat. Aber Ihre eigentliche Absicht ist eine * statische Factory * -Funktion, die an den Typ "Date" gebunden ist und nicht an jede Instanz. Probiere stattdessen 'Date.stringToDate = function (date) {..}'. Denken Sie auch daran, es mit 'Date.fromString()' zu benennen – haim770

Antwort

2

Als Erstes fügen Sie eine Funktion zum Prototyp hinzu, so dass sie nur für die Instanz von Date und nicht für Date selbst verfügbar ist.

Hier ist ein Beispiel mit A Konstruktorfunktion und 2 Funktionen someFn definiert auf Prototyp und someOtherFn definiert auf A Konstruktor selbst.

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);

Zweitens brauchen Sie nicht eine solche Funktion, neue Datum es für Sie ganz gut analysieren wird.

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

Ok, ich sehe, dass Sie Ihre Reisedaten ein Format 24/03/2016, haben wollen, so ist, dann können Sie einige zusätzliche Funktion hinzufügen, aber ich würde es auf Datum nicht definieren, builtin Objekte erstreckt, ist schlecht Idee im Allgemeinen, weil Sie nie wissen, wie sich Schnittstelle solcher Objekte in zukünftiger Browser-Version ändern könnte oder wie Ihre Funktionen von Skripten Dritter außer Kraft gesetzt werden könnten.

Also würde ich empfehlen, es nur als eigenständige Funktion zu deklarieren und bei Bedarf zu verwenden. Es ist kein großer Unterschied zwischen der Verwendung von stringToDate('24/03/2016') und Date.stringToDate('24/03/2016') wenn überhaupt, zuerst ist kürzer.

Verwandte Themen