Finessen in der Objektorientierten Programmierung mit JavaScript
Betrachte untenstehenden Code:
let date = new Date( Date.now() ); // Legacy let datetime = new DateTime(date); // Custom
Da wird also ein Legacy-Date-Objekt erstellt und zum Erstellen einer Instanz der eigenen Klasse DateTime
übergeben. Ein solche Vorgehensweise wird Dependency Injection genannt. Ziel ist es, Objekte anderer Klassen in Methoden der eigenen Klasse zu verwenden. Aufgrunddessen ist es auch möglich, diese Fremdobjekte erst in der eigenen Klasse zu erstellen anstatt sie vor der Instanzerstellung zu erzeugen. Übergeben wird dann lediglich das was die Objekte der Fremden Klasse(n) benötigen. Und das sieht so aus:
// Erzeuge nur die Instanz der eigenen Klasse let dati = new DateTime( Date.now() );
Es ergibt sich eine einfache Anwendung, Synopsis:
let dati = new DateTime(); dati.localtime().str; // dati.gmtime().dmy; // dati.gmtime().hms; // dati.gmtime().year; // dati.gmtime().str; // // Perl.gmtime: Sat Oct 5 15:46:39 2024
Die Methoden localtime
und gmtime
werden also ganz ähnlich der gleichnamigen Perlfunktionen angewandt und das war auch das Ziel dieser Entwicklung.
Mit dem aggregierten Objelt, so bezeichnet man Objekte die in eigenen Instanzen Eigenschaften sind, ist es ganz einfach, Methoden zu definieren die genauso heißen wie die Methoden der fremden Klasse. Beispiel:
DateTime.prototype.toString = function(){ return this.Date.toString(); }; DateTime.prototype.toUTCString = function(){ return this.Date.toUTCString(); };
// Date Time Class customized, optimized // ClassName: DateTime // timestamp ist IMMER UTC in Milli(!)Sekunden seit 1.1.1970 function DateTime( timestamp ){ this.utc = timestamp != null ? timestamp : Date.now(); // Legacy Date-Objekt this.Date = new Date( this.utc ); } // localtime() und gmtime() analog der gleichnamigen // Perlfunktionen DateTime.prototype.localtime = function(){ let hunt = { year: this.Date.getFullYear(), mon: this.Date.getMonth() + 1, mday: this.Date.getDate(), min: this.Date.getMinutes(), hour: this.Date.getHours(), sec: this.Date.getSeconds(), str: this.Date.toString(), }; let d2 = hunt.mday.toString().length == 2 ? hunt.mday : "0"+hunt.mday; let m2 = hunt.mon.toString().length == 2 ? hunt.mon : "0"+hunt.mon; hunt.dmy = d2+"."+m2+"."+hunt.year; let hh = hunt.hour.toString().length == 2 ? hunt.hour : "0"+hunt.hour; let mm = hunt.min.toString().length == 2 ? hunt.min : "0"+hunt.min; let ss = hunt.sec.toString().length == 2 ? hunt.sec : "0"+hunt.sec; hunt.hms = hh+":"+mm+":"+ss; return hunt; }; DateTime.prototype.gmtime = function(){ let hunt = { year: this.Date.getUTCFullYear(), mon: this.Date.getUTCMonth() + 1, mday: this.Date.getUTCDate(), min: this.Date.getUTCMinutes(), hour: this.Date.getUTCHours(), sec: this.Date.getUTCSeconds(), str: this.Date.toUTCString(), }; let d2 = hunt.mday.toString().length == 2 ? hunt.mday : "0"+hunt.mday; let m2 = hunt.mon.toString().length == 2 ? hunt.mon : "0"+hunt.mon; hunt.dmy = d2+"."+m2+"."+hunt.year; let hh = hunt.hour.toString().length == 2 ? hunt.hour : "0"+hunt.hour; let mm = hunt.min.toString().length == 2 ? hunt.min : "0"+hunt.min; let ss = hunt.sec.toString().length == 2 ? hunt.sec : "0"+hunt.sec; hunt.hms = hh+":"+mm+":"+ss; return hunt; };
Datenschutzerklärung: Diese Seite dient rein privaten Zwecken. Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. sos@rolfrost.de.