6. Unterrichtsblock: Objekte und Events

Kursinhalte
Heute lernst du, Daten zu Dingen zusammenzufassen (Objekte) und deine Seite auf Klicks und Eingaben reagieren zu lassen (Events). Am Ende baust du ein kleines Widget, das anzeigt, ob ein Geschäft gerade geöffnet hat. Arbeite weiter in deinem js-projekt.
Objekte: Werte, die zusammengehören
Ein Objekt fasst mehrere Werte zu einer Sache zusammen. Jeder Wert hat einen Namen, die Eigenschaft. Ein Objekt schreibst du in geschweiften Klammern mit Paaren aus name: wert.
const person = {
vorname: "Lina",
nachname: "Müller",
alter: 17
};
console.log(person.vorname); // Punkt-Schreibweise
console.log(person["alter"]); // Klammer-Schreibweise
person.alter = 18; // Eigenschaft ändern
person.stadt = "Rosenheim"; // Eigenschaft hinzufügen
console.log(person);
const darfst du verändern (Eigenschaften ändern oder hinzufügen), aber nicht komplett durch ein neues Objekt ersetzen.Methoden: Funktionen im Objekt
Ein Objekt kann auch Funktionen enthalten. Man nennt sie Methoden. Mit this greift die Methode auf das eigene Objekt zu: this.vorname heißt „der Vorname dieses Objekts“.
const person = {
vorname: "Lina",
nachname: "Müller",
vollerName: function () {
return this.vorname + " " + this.nachname;
}
};
console.log(person.vollerName()); // Lina Müller
Objekte und Arrays kannst du kombinieren. So entsteht eine Liste von Dingen mit jeweils eigenen Eigenschaften:
const personen = [
{ vorname: "Lina", alter: 17 },
{ vorname: "Max", alter: 19 }
];
console.log(personen[1].vorname); // Max
Aufgabe 1 – Lebensmittel
Zeit: ca. 5 Minuten
- Lege ein Objekt
lebensmittelmit den Eigenschaftenname,preis,herkunftundkategoriean und denke dir Werte aus. - Gib Preis und Name mit der Punkt-Schreibweise aus und die Herkunft mit der Klammer-Schreibweise.
- Ändere den Preis und füge eine neue Eigenschaft
biomittruehinzu.
Aufgabe 2 – Methode
Zeit: ca. 10 Minuten
- Ergänze dein Objekt um die Methode
beschreibung(), die mitthiseinen Satz zurückgibt, zum Beispiel „Apfel aus Bayern, 0.5 Euro“. - Rufe die Methode auf und gib das Ergebnis auf der Seite aus.
Events: Die Seite reagiert
Ein Event (Ereignis) ist etwas, das auf der Seite passiert: ein Klick, eine Eingabe, ein Tastendruck. Du sagst dem Browser, welche Funktion dann laufen soll. Den Weg mit onclick im HTML-Tag kennst du schon. Sauberer ist es, JavaScript und HTML zu trennen und die Funktion in app.js mit addEventListener zu verbinden.
<button id="knopf">Klick mich</button>
<p id="ausgabe"></p>
const knopf = document.getElementById("knopf");
function gruessen() {
document.getElementById("ausgabe").innerHTML = "Hallo!";
}
knopf.addEventListener("click", gruessen); // gruessen ohne Klammern!
addEventListener schreibst du den Ereignisnamen ohne „on“: "click" statt onclick. Die Funktion übergibst du ohne Klammern. Mit Klammern würde sie sofort ausgeführt, nicht erst beim Klick.Die Funktion darf auch direkt dabeistehen (namenlos):
knopf.addEventListener("click", function () {
document.getElementById("ausgabe").innerHTML = "Noch einmal hallo!";
});
| Event | Wann es passiert |
|---|---|
"click" | Klick auf das Element |
"mouseover" | Maus fährt über das Element |
"mouseout" | Maus verlässt das Element |
"input" | Jede Änderung in einem Eingabefeld, während man tippt |
"change" | Ein Feld wurde geändert und verlassen |
"keydown" | Eine Taste wird gedrückt |
"load" | Die Seite ist fertig geladen |
Bewege die Maus über das Feld und klicke darauf:
Aufgabe 3 – Farbwechsel
Zeit: ca. 10 Minuten
- Baue eine rote Fläche (
div) mit weißer Schrift und einen Button. - Verbinde mit
addEventListenerden Button mit einer Funktion, die die Fläche blau färbt (style.backgroundColor) und den Text in der Fläche ändert.
Aufgabe 4 – Live-Vorschau
Zeit: ca. 5 Minuten
- Baue ein Eingabefeld und einen leeren Absatz.
- Verwende das Event
"input", damit der Absatz bei jedem Tastendruck den eingegebenen Text anzeigt. - Tipp: Den Text eines Feldes liest du mit
feld.value.
Datum und Uhrzeit
Mit dem Objekt Date fragst du die aktuelle Zeit vom Gerät ab.
const jetzt = new Date();
console.log(jetzt.getHours()); // Stunde, 0 bis 23
console.log(jetzt.getMinutes()); // Minute, 0 bis 59
console.log(jetzt.getDay()); // Wochentag: 0 = Sonntag, 1 = Montag ... 6 = Samstag
getDay() beginnt bei Sonntag = 0. Der Montag ist also 1, der Samstag 6.Abschlussaufgaben
Jetzt wird es anspruchsvoller. Nimm dir Zeit, es müssen nicht alle Aufgaben geschafft werden.
Aufgabe 5 – Öffnungszeiten-Widget
Zeit: ca. 20 Minuten
Baue ein Widget, das anzeigt, ob ein Geschäft gerade geöffnet hat.
- Lege ein Objekt
oeffnungmit den Eigenschaftenvon(9) undbis(18) an. - Schreibe eine Funktion
istGeoeffnet(), die mitnew Date().getHours()prüft, ob die aktuelle Stunde zwischenvonundbisliegt, undtrueoderfalsezurückgibt. - Verbinde mit
addEventListenereinen Button „Jetzt prüfen“, der „Geöffnet“ (grüne Schrift) oder „Geschlossen“ (rote Schrift) anzeigt. - Gestalte das Widget mit CSS: grüner Hintergrund bei „Geöffnet“, gelber bei „Geschlossen“.
Zusatz: Am Wochenende (getDay() ist 0 oder 6) ist immer geschlossen. Lege außerdem ein Array feiertage mit Datumsangaben an.
Aufgabe 6 – Warenkorb-Objekt
Zeit: ca. 15 Minuten
Baue einen Warenkorb als ein Objekt, das seine Daten und sein Verhalten enthält.
- Lege ein Objekt
warenkorbmit der Eigenschaftsumme(0) und der Eigenschaftartikel(leeres Array) an. - Schreibe eine Methode
hinzufuegen(name, preis), die den Artikel ins Array legt und den Preis zursummeaddiert. Verwendethis. - Schreibe eine Methode
zeige(), die Artikelliste (join) und Summe als Text zurückgibt. - Baue zwei Eingabefelder und einen Button „Hinzufügen“, der die Methode aufruft und die Anzeige aktualisiert.
Denkaufgabe: Warum funktioniert es nicht, wenn du in hinzufuegen statt this.summe nur summe schreibst?
Kurz zusammengefasst
Objekte bündeln Eigenschaften und Methoden, this meint das eigene Objekt. Events lassen die Seite auf Klicks und Eingaben reagieren, sauber verbunden mit addEventListener. Mit Date fragst du Uhrzeit und Wochentag ab.
