# Rückgabe von Objektwerten in Konstruktoren



## conflate (30. Juli 2004)

In der deutschen Ausgabe von *&quot;Javascript  Das umfassende Referenzwerk&quot; * (O'Reilly, 4. Auflage) werden auf der Seite 134 ff. Konstruktoren erklärt.

Es heißt am Schluss des Kapitels 8.2:


> Konstruktorfunktionen haben normalerweise keine Rückgabewerte. Sie initialisieren das Objekt, das als Wert von this übergben wurde, und geben nichts zurück. Ein Konstruktor darf aber einen Objektwert zurückgeben, und wenn er das tut, wird dieses zurückgegebenen Objekt zum Wert des Ausdrucks new. In diesem Fall wird das Objekt, das der Wert von this war, einfach verworfen.



Kann mir bitte jemand erklären, was hier gemeint ist und dazu am Besten ein passendes Beispiel machen?

Herzlichen Dank im Voraus


----------



## DrOverflow (2. August 2004)

Die Frage ist relativ schwer zu erklären, aber ich werd es trotzdem mal versuchen...

Das mit den Konstruktoren ist eine etwas komplizierte Geschichte, und ich werd es dir in Java, und nicht in JavaScript erklären, da dort viel mehr mit Objekten gearbeitet wird, und ich es auch in Java gelernt habe. (An dieser Stelle der zwar bekannte, dennoch wichtige Hinweis - Java ist nicht gleich JavaScript).  

Also:
Einen Konstruktor verwendet man, um ein neues Objekt zu erzeugen. 
Dies geschieht so: "Variablenname = new Konstruktor()".

Ein Konstruktor selbst ist eine spezielle Methode (Java) bzw Funktion (JavaScript), der Parameter übergeben werden, die überladen werden kann (Java) und die keinen  Rückgabewert besitzt. 

Unter Rückgabewert versteht man zB
function gibWasZurueck(var irgendwas)
{
 return irgendwas*irgendwas;
}

Konstruktoren können aber keine Werte, sondern nur Objekte zurückgeben. 
Dies wäre zB 
var NeuesArray = new Array(), var NeuesBild = new Image(), ...

Hier ein kleines Bsp (Java):
Als erstes wird eine neue Klasse erzeugt, in dieser Klasse die Variablen festgelegt und der Konstruktor erstellt (Konstruktor hat den selben Name wie die Klasse).
zB 
public class NeueKlasse() {
 int wert1=0;
 int wert2=0;

 public NeueKlasse(parameter1, parameter2) {
   this.wert1 = parameter1;
   this.wert2 = parameter2;
 }
}

Ab jetzt existiert die Klasse "NeueKlasse".
Wird eine neue Variable erzeugt, und zwar mit 
"Variablenname = new NeueKlasse(5, 10)", so hat man ab diesem Zeitpunkt ein Objekt zur Verfügung, dessen Variablen die Werte 5 und 10 haben. 

Ich hoffe, dass ist einigermaßen verständlich, und all jene, die mich kritisieren wollen, weil es  ist, können darauf gerne verzichten, weil ich das selber weiß, aber zum Verständnis der Konstruktoren ist die Sprache nicht so sehr entscheidend.  

lg D;-]c

BTW: Falls das noch zu ungenau ist - einfach fragen!


----------

