Hallo,
PS. Unterscheidet sich
window.setTimeout("insertDateTime()", 1000 - (new Date().getMiliseconds()));
(schließende Klammer an anderer Stelle) in der Ausführung in irgendeiner Weise?
so wie du es geschrieben hast gibt es keinen gravierenden Unterschied.
Anders sieht es aus, wenn du dem Konstruktor keine Parameter übergibst und
auch die Klammern wegläßt, was ja legitim ist.
alert((new Date).getMilliseconds()); // OK
alert(new Date.getMilliseconds()); // Fehler
Beim ersten Beispiel ist es halt eindeutig, dass auf eine Methode der
neuen Instanz von Date zugegriffen werden soll. Beim zweiten gibt's einen
Fehler, da es keine statische Methode getMilliseconds gibt bzw. genauer
gesagt die Vorlage für den Konstruktor fehlt (siehe weiter unten).
Date.getMilliseconds = function()
{
return 42;
}
alert(Date.getMilliseconds()) // 42
alert(new Date.getMilliseconds()) // 42?
alert((new Date).getMilliseconds()); // Die aktuellen Millisekunden
Wenn man das mal laufen läßt wird man feststellen, dass im zweitem Beispiel
ein Objekt zurückgeliefert wird, nicht aber die Zahl 42. Warum?
Der new-Operator bewirkt ja folgendes:
1. Es wird eine Instanz von Object erzeugt
2. Es wird anschließend der Konstruktor für das Objekt aufgerufen. Der Konstruktor
ist ja eine Funktion die als Vorlage dient wobei auf das erzeugte Objekt über
den this-Zeiger zugegriffen werden kann.
3. Der Konstruktor initialisiert das Objekt mit den übergebenen Werten (Parameter).
Soll heißen, dass die Werte aus der Parameterliste über den this-Zeiger der neuen
Instanz zugewiesen werden können. Ist unwichtig steht aber so in der Doku;)
Im zweiten Beispiel wird also in Schritt 2 für den Konstruktor (Vorlage)
"Date.getMilliseconds" aufgelöst und die letzte Klammer stellt die Parameterliste
für selbigen dar.
// Konstruktor im zweiten Beispiel.
function()
{
return 42;
}
Ändern wir mal diesen "Konstruktor" und nutzen Parameter für
die Initialisierung.
Date.getMilliseconds = function(name)
{
this.name = name;
return 42; // Rückgabewerte im Konstruktor haben keine Bedeutung
}
alert(new Date.getMilliseconds("Gunnar").name); // "Gunnar"
So, ich hoffe das war so korrekt und verständlich. Bin mir sicher dass du das so auch
schon vermutet hast aber die Nachwelt soll ja auch was zum lesen haben.
bernd