Gleiche Eigenschaften und Methoden unterschiedlicher Individuen, die einen gemeinsamen semantischen Zweck haben, können zu einem Begriff zusammengefasst werden der Klasse.
Das ganze funktioniert wie in einer Firma. Die Berufsgruppe entspricht einer Klasse, die eingesetzten Leute in der Firma den Objekten.
Beispiele:
Aus dieser Klasse können einzelne Objekte erzeugt werden.
Beispiele:
Die Schwierigkeit bei diesem Modell führt zu Fragen wie:
Schritte für das Beispiel Rechteck:
Klassennamen werden immer als Hauptwort geschrieben.
a) Ein Rechteck kann durch die Länge zweier Seiten beschrieben werden.
Die Klasse Rechteck wird wie eine Funktion deklariert:
function Rechteck ()
Die Eigenschaften werden innerhalb der Function mit this. deklariert
Damit weiß jedes neue erzeugte Rechteck, wie breit und hoch es ist.
{
this.breite;
this.hoehe;
}
Damit lautet die vollständige Formulierung für das Objekt Rechteck:
function Rechteck (b,h){
this.breite = b;
this.hoehe = h;
}
Alles mit this ist öffentlich.
var trennwand = new Rechteck();
erzeugt ein Objekt der Klasse Rechteck mit den Namen trennwand.
var trennwand = new Rechteck(3,4);
erzeugt das Objekt trennwand von der Klasse Rechteck mit einer Breite von 3 und einer Höhe von 4.
trennwnand.breite = 5
ändert die breite der trennwand auf 5
alert(trennwnad.breite)
meldet die Breite von der trennwand
// Die Klasse function Rechteck(b, h) { "use strict"; this.breite = b; this.hoehe = h; } // Das Objekt der Begierde var trennwand = new Rechteck(3, 2); // breite neu setzen trennwand.breite = 12; // breite lesen und ausgeben alert(trennwand.breite);
Es wird zuerst die Klasse gebildet und dann von dieser Klasse ein Objekt verwendet.
Alles ist öffentlich.
// Klasse Person function Person(name, zahl) { this.my_name = name; this.my_zahl = zahl; this.quadriere = function() { this.my_zahl = this.my_zahl * this.my_zahl; } } // Objekte der Klasse Person anlegen anton = new Person("Anton", 7); // alle öffentlichen Eigenschaften und Methoden ausgeben document.write("<hr><b>// new Person(Anton,7) angelegt.</b><br>"); for (i in anton) { document.write("<hr>" + i + " = " + anton[i] + ""); } document.write("<hr>// anton.quadriere()</b>"); // Die Methode quadriere aufrufen anton.quadriere(); // alle öffentlichen Eigenschaften und Methoden ausgeben for (i in anton) { document.write("<hr>" + i + " = " + anton[i] + ""); }
Achtung Objekte können JEDERZEIT zur Laufzeit des Programmes neue Methoden und Eigenschaften erhalten!!! Auch eine nachträgliches hinzufügen von Vererbungsketten ist möglich!
Alles mit this ist öffentlich.
Die Variable in der Funktion mittels var ist NUR in der Funktion sichtbar und wirkt daher privat!
// Klasse Person class Person { constructor(vorname, nachname) { this.my_vorname = vorname; this.my_nachname = nachname; var zahl = 0; this.quadriere = function(parameter) { zahl = parameter; return (zahl * zahl); } } // Objekte der Klasse Person anlegen var roland = new Person("Roland", "Geyer"); // Wert einer Eigenschaft erfahren document.write(roland.my_vorname + "<br>"); // Die Methode mixen() aufrufen document.write(roland.quadriere(4)); // alle öffentlichen Eigenschaften ausgeben for (i in roland) { document.write("<hr>" + i + " = " + roland[i]); } // Will die zahl sehen document.write("<br>only privat: " + roland.zahl);
Achtung Objekte können auch jetzt JEDERZEIT zur Laufzeit des Programmes neue Methoden und Eigenschaften erhalten!!! Auch eine nachträgliches hinzufügen von Vererbungsketten ist möglich!
Alles mit this ist öffentlich.
Die Variable in der Funktion mittels var ist NUR in der Funktion sichtbar und wirkt daher privat!
Die private Methode ist nur mit der privilegierten Funktion ansprechbar.
Die entscheidenden privaten Variablen sind von aussen nicht einmal sichtbar!
Wir schreiben eine Klasse, die ihr Alter nicht verraten will und wenn falsch ausgibt:
// Klasse Person class Person { constructor(name) { // ### Variable ### // Variable öffentlich this.my_name = name; // Variable privat var my_alter = "ungeboren"; // ### Methoden ### // Methoden öffentlich / privilegiert this.setAlter = function(p) { verstecke(p); } this.getAlter = function() { return schummeln(); } // Methoden privat function verstecke(parameter) { my_alter = parameter; } function schummeln() { return my_alter - 10; } } } // Objekte der Klasse Person anlegen anton = new Person("Anton"); // alle öffentlichen Eigenschaften und Methoden ausgeben document.write("<hr><b>// new Person(Anton)</b><br>"); for (i in anton) { document.write("<hr>" + i + " = " + anton[i] + "<br>"); } document.write("<hr><b>// anton.setAlter(45)</b><br>"); anton.setAlter(45); // alle öffentlichen Eigenschaften und Methoden ausgeben for (i in anton) { document.write("<hr>" + i + " = " + anton[i] + "<br>"); } document.write("<hr><b>// anton.getAlter()</b><br>"); document.write("<hr>" + anton.getAlter());
Idee und Anleitung von Douglas Crockford Webseite zum Thema: Private Members in JavaScript
Achtung Blödsinn ist möglich und wird nicht Fehler-gemeldet - da dynamisches Verhalten!!
durch namenlose (anonyme) Klassen,
werden in JavaScript mit new Object() nachgebildet