192 Kapitel 5
Objektreferenzen übergeben
Noch ein paar Worte zur Übergabe von Objekten
an Funktionen
Ein bisschen haben wir uns bereits darüber unterhalten, wie Argumente an Funktionen übergeben werden.
Argumente werden als Werteparameter, sprich als Kopie, übergeben. Wenn wir einen Integer-Wert übergeben,
erhält die aufgerufene Funktion für die interne Benutzung eine Kopie dieses Werts. Das Gleiche gilt für
Objekte. Wir sollten uns trotzdem noch einmal genau ansehen, was die Verwendung von Werteparametern
für Objekte bedeutet, damit Sie verstehen, was bei der Übergabe eines Objekts an eine Funktion passiert.
Weisen Sie einer Variablen ein Objekt zu, enthält sie, wie Sie bereits wissen, eine Referenz auf das Objekt und
nicht das Objekt selbst. Stellen Sie sich die Referenz noch einmal als Zeiger auf das Objekt vor:
Wenn Sie also eine Funktion mit einem Objekt übergeben, wird nicht
das Objekt selbst, sondern eine Objektreferenz weitergereicht. Im Sinne der
Werteparameter wird demnach eine Kopie der Referenz, die ebenfalls ein
Zeiger auf das Objekt ist, an den Parameter übergeben.
Hund
name: “Fido”
weight: 40
breed: “StraGraMi”
loves: “Gassi gehen”
Wird ein Objekt einer Variablen
zugewiesen, erhält die Variable
eine Referenz auf das Objekt. Sie
enthält nicht das Objekt selbst.
Und was heißt das alles? Die wichtigste Auswirkung ist vermutlich, dass bei einer Änderung
einer Objekteigenschaft innerhalb einer Funktion die Eigenschaft des Original-Objekts
aktualisiert wird. Alle Änderungen, die innerhalb der Funktion am Objekt vorgenommen
werden, bleiben auch nach Beendigung der Funktion erhalten. Hier ein Beispiel:
Wenn wir die Funktion bark
aufrufen und ihr fido übergeben,
erhält der Parameter dog eine
Kopie der Referenz.
fido
dog
function bark(dog) {
... code here ...
}
bark(fido);
fido
Der Parameter dog zeigt auf das
gleiche Objekt wie fido.
Kopie
Sie sind hier 193
Objekte verstehen
loseWeight(fido, 10);
fido enthält eine Objekt-
referenz. Die Variable
fido enthält also nicht das
Objekt selbst, sondern zeigt
nur darauf.
Eine Diät für Fido …
Angenommen, wir wollten eine neue Methode zur Gewichtsabnahme für Hunde
ausprobieren. Diese soll in einer Funktion namens loseWeight implementiert werden.
Zur Benutzung übergeben Sie loseWeight einfach ein Hund-Objekt und wie viele Kilo
abgespeckt werden sollen. Daraufhin wird auf fast schon magische Weise das Gewicht des
Hundes verringert. Und das geht so:
function loseWeight(dog, amount) {
dog.weight = dog.weight - amount;
}
alert(fido.name + " wiegt jetzt " + fido.weight);
Wenn wir von dog.weight 5 Kilo
subtrahieren, ändern wir dadurch
auch den Wert von fido.weight.
Wenn wir fido an die loseWeight-Funktion
übergeben, erhält der Parameter dog eine
Kopie der Referenz und nicht eine Kopie des
Objekts. fido und dog zeigen auf dasselbe
Objekt!
Wenn wir fido an eine
Funktion übergeben,
reichen wir eine Referenz
auf das Objekt weiter.
1
Werfen Sie zunächst einen Blick auf das Hund-Objekt (referenziert in der
Variablen fido), das wir an die loseWeight-Funktion übergeben wollen:
2
Der Parameter dog der loseWeight-Funktion erhält eine
Kopie der Referenz auf das Objekt. Änderungen an den
Eigenschaften der Parametervariablen wirken sich direkt
auf das Objekt aus.
Die dog-Referenz
ist eine Kopie der
fido-Referenz.
dog
fido
Hund
name: “Fido”
weight: 48
breed: “StraGraMi”
loves: “Gassi gehen”
Hier ist das Hund-Objekt.
194 Kapitel 5
Übung zu Objekten
function getSecret(file, secretPassword) {
_______.opened = _______.opened + 1;
if (secretPassword == _______.password) {
return ______.contents;
}
else {
return "Ungültiges Passwort! Keine geheimen Daten für Sie.";
}
}
function setSecret(file, secretPassword, secret) {
if (secretPassword == _______.password) {
______.opened = 0;
______.contents = secret;
}
}
var superSecretFile = {
level: "streng geheim",
opened: 0,
password: 2,
contents: "Das nächste Treffen von Dr. Evel ist in Detroit."
};
var secret = getSecret(_______________, _____);
console.log(secret);
setSecret(_____________, _____, "Das nächste Treffen von Dr. Evel ist in Philadelphia.");
secret = getSecret(_______________, _____);
console.log(secret);
Sie haben eine supergeheime Datei und zwei Funktionen erhalten. Mit
den Funktionen können Sie den Inhalt der Datei auslesen und verändern
– allerdings nur, wenn Sie das richtige Passwort kennen. Ist das Passwort
korrekt, gibt die erste Funktion, getSecret, den Inhalt der Datei zurück.
Dabei wird jeder Zugriffsversuch protokolliert. Die zweite Funktion,
setSecret, aktualisiert die Datei und setzt den Zugriffszähler wieder auf 0.
Ihre Aufgabe besteht darin, die Leerzeilen im unten stehenden JavaScript-
Code zu füllen und Ihre Funktionen zu testen.
Spitzen Sie Ihren Bleistift

Get JavaScript-Programmierung von Kopf bis Fuß now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.