Einzelnen Beitrag anzeigen
  #5 (permalink)  
Alt 11-11-2007, 19:28
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
das eine ist ein objekt, das andere ein neues objekt? und wo liegt der praktische unterschied?
Auch ohne "new" bekommst du ein neues Objekt zurück und nicht etwa immer das selbe. Folgender Schnipsel beweist das:
Code:
a = Array();
b = Array();
a[0] = 'foo';
document.writeln(b[0]);
Soweit klar. Nun zum Unterschied:

a = new Array(); erzeugt ein neues Array-Objekt und speichert es in a.

a = Array(); ruft die Funktion Array() auf und speichert den zurückgegebenen Wert in a.

Das hört sich an, als gäbe es zwischen beiden Anweisungen einen Unterschied - Objekt erzeugen vs. Funktion aufrufen.

Dem ist aber nicht so!
Denn in JS werden Objekttypen über Funktionen definiert.

Array ist zwar ein built-in type, aber wenn es das nicht wäre, würde seine Definition so aussehen:

Code:
function Array(...) {
    this.length = arguments.length;
    this.pop = function (...) { ... };
    this.push = function (...) { ... };
    ...
    return this; 
}
Nun sollte klar sein, was bei "a = Array();" passiert.
Das Schlüsselwort new in der Anweisung "a = new Array();" ändert nichts daran. Beide Varianten sind funktional identisch.

Es gilt als guter Stil, das "new" bei der Erzeugung von Objekten nicht wegzulassen. So kann man leicht erkennen, wo wirklich ein Objekt erzeugt wird und wo lediglich eine Funktion aufgerufen wird, die bspw. zwei Zahlen addiert und das Ergebnis zurückgibt.
EDIT:
Referenz: 15.4.1 in http://www.ecma-international.org/pu...T/Ecma-262.pdf

Geändert von onemorenerd (11-11-2007 um 20:52 Uhr)
Mit Zitat antworten