| Die Objekt-orientierte Programmierung ist ein Grund-Element moderner Informatik. | Diese Seite zeigt an einigen Beispielen die Erzeugung und Verwendung von Objekten mit Javascript. |
Javascript
|
ECMAScript für HTML und XML |
| Objekt | Objekt-orientierte Programmierung |
| Klasse und Objekt | Erzeugung einfacher Klassen und Objekte |
| Objekt-Variable | Zuweisung an Variable, Übergabe an Funktionen |
| Eigenschaften | Eigenschaften (properties) von Objekten, Initialisierung |
| Globale Methoden | Methoden mit externen Funktionen, Callback-Funktionen |
| Private Methoden | Methoden mit intern gekapselten Funktionen |
| Gleiche Namen | von Eigenschaften und Objekten unterschiedlicher Objekt-Klassen |
| Lesen & Schreiben | Methoden zum Lesen und (sicheren) Schreiben von Eigenschaften |
| Argumente | Optionale Argumente und Standard-Werte für Argumente |
| JSON | Syntax-Variante - Senden von Objekten über das Internet |
| Verwandte Themen | Die Javascript Objekte style, stylesheet, XMLHttpRequest (Ajax) |
| Links |
Ausgewählte
|
Klasse und einfaches Objekt |
|
Definition einer Objekt-KlasseDas Beispiel rechts zeigt die Definition der Objekt-Klasse kreis• Die Definition erfolgt leider durch die missverständliche Anweisung function, ebenso wie die einer 'gewöhnlichen' Funktion. • In der Definition ist bereits eine Eigenschaft mit dem Namen r (für Radius) enthalten. Sie erhält im Beispiel den Wert 0 • Das Wort this bezeichnet immer das aktuelle Objekt. • Objekt-Syntax: Die Namen von Eigenschaften und Methoden des Objekts werden nachgestellt und mit einem . Punkt getrennt. Beispiel: this.r ist eine Eigenschaft. • Der Operator typeof liefert für jede Klasse den Wert Live- |
Objekt-Klasse kreis mit der Eigenschaft r
function kreis() {
this.r = 0;
}
Anwendung: alert(typeof kreis);
|
Erzeugung von ObjektenNachdem eine Klasse definiert wurde (oben), können beliebig viele Objekte dieser Klasse erzeugt werden.• Ein Objekt wird mit der Konstruktor-Anweisung new erzeugt. • Dabei (Initialisierung) wird der Code der Klassen-Definition durchlaufen. Er besteht im Beispiel lediglich aus der Anweisung this.r=0; Jedes neue Objekt der Klasse kreis verfügt daher über eine einzige Eigenschaft r mit dem Anfangs-Wert 0 • Der Operator typeof liefert für jedes Objekt den Wert . |
Erzeugung von Objekten der Klasse kreis
var k1 = new kreis();
var k2 = new kreis(); alert(typeof k1); |
Objekt-Variable und -Argumente |
|
Zuweisung an Variable▲ Wenn ein Javascript Objekt an eine Variable zugewiesen oder an ein Unterprogramm übergeben wird, dann wird die Adresse des Objekts weitergegeben, nicht sein Wert.▲ Das zugewiesene Objekt ist daher nicht eine Kopie, sondern nur ein Alias-Name für das Original. Jede Änderung am Alias wirkt auf das Original !
|
Beispiel:
Zunächst wird ein Standard Date-Objekt d
erzeugt.Danach wird versucht, davon eine Kopie e zu erzeugen und diese zu ändern (Addition von 10 Sekunden).
var d = new Date();
Ergebnis:var e = d; e.setSeconds(e.getSeconds()+10); Die Zeit wurde in beiden Variablen d,e um +10 Sekunden geändert, da beide das gleiche Objekt bezeichnen. |
Übergabe an Unterprogramme▲ Auch bei der Übergabe eines Objekts als Argument wird seine Adresse übergeben.Das Unterprogramm (Javascript-function) erhält daher das Original-Objekt und nicht eine Kopie (wie bei skalaren Variablen). ▲ Wenn das Unterprogramm Änderungen am Objekt durchführt, dann betreffen diese das Original ! Ein ähnliches Verhalten zeigen auch Javascript → Arrays. |
Funktion (bearbeitet das Original-Objekt !)
function double_r(kobj) {
Anwendung:
kobj.r = kobj.r * 2;
}
var k = new kreis();
Ergebnis: Der Radius k.r des Objekts wurde verdoppelt.
k.r = 10; double_r(k); |
Rückgabe von UnterprogrammenFunktionen können mit der return-Anweisung auch Objekte zurückgeben. Das ist nur dann sinnvoll, wenn das Objekt durch die Funktion erzeugt wurde.Wenn ein Objekt durch eine Funktion geändert wurde, dann braucht man es nicht zurückgeben: Die Änderung erfolgte ohnehin bereits am Original-Objekt. |
Beispiel:
function kreis_100() {
var kobj = new kreis(100);
}
return kobj; |
Globale Methoden mit externen Funktionen |
|
FunktionDas Beispiel zeigt die 'echte' Funktion umfang zum Vergleich mit der ähnlich aussehenden Definition einer Objekt-Klasse.• Der Operator typeof liefert ebenso wie für eine Klasse den Wert . • Die Funktion liefert für jedes Argument radius den dafür berechneten Umfang. Als Argument kann auch eine Variable oder Objekt-Eigenschaft k.r verwendet werden. • Da genau diese Funktion oft im Zusammenhang mit einem Kreis verwendet wird, ist es sinnvoll, sie als Methode in die Definition der Objekt-Klasse aufzunehmen. |
Eine 'gewöhnliche' Funktion:
function umfang(radius) {
Anwendung:
return 2*radius*Math.PI;
}
alert(typeof umfang);
alert(umfang(12)); alert(umfang(k.r)); |
|
Das Beispiel zeigt die Ergänzung der Klasse kreis durch
die Methode umfang • In der Objekt-Definition wird der Methode (hier this.umfang ) die externe Funktion (hier get_umfang ) ohne () Klammern zugeordnet. • Wenn eine Funktion auf Eigenschaften des Objekts Bezug nehmen soll, dann wird dazu Objekt-Syntax verwendet, z.B. hier this.r in der Funktion get_umfang • Für Methode und Funktion wurden absichtlich verschiedene Namen gewählt, um eine Verwechslung auszuschließen. • Bei Anwendung einer Methode müssen die () Klammern angegeben werden. Wie an jede andere Funktion lassen sich auch an Methoden in den () Argumente übergeben. Live- |
Objekt kreis mit Eigenschaft r und
Methode umfang
function kreis(radius) {
this.r = radius;
}this.umfang = get_umfang;
function get_umfang() { return 2*this.r*Math.PI;
}
Anwendung:
var k = new kreis(20);
alert(k.r); alert(k.umfang()); |
|
• Oft werden Methoden mit gleichen Namen für unterschiedliche Objekte benötigt, z.B. (Beispiel unten) muss die Methode umfang für die Objekte kreis, dreieck, rechteck ganz anders berechnet werden. • Solche Funktionen sind global verfügbar. Das kann zu Problemen führen, wenn sie für andere Zwecke angewendet werden als für jenes Objekt, für welches sie programmiert wurden. • Zur Programmierung eigener Objekte verwenden sie daher besser nur ↓ interne Funktionen (nächstes Kapitel). |
Warum ist umfang() eine Methode ? • Beachten sie die Sprache der Informatik: Was mit einer Funktion berechnet wird, ist eine Methode ! • In Umgangssprache und Geometrie bleibt der Umfang weiterhin eine Eigenschaft jedes Kreises. |
Callback-FunktionenEs gibt einen Bereich, wo externe Funktionen nicht ersetzbar sind - Die Ergänzung vorhandener Objekte (z.B. Javascript Standard Objekte) durch eigene Methoden.Der Name der eigenen (externen) Funktion wird an ein unzugängliches Obejkt übergeben. So kann man erreichen, dass die eigene Funktion unter den gewünschten Bedingungen ausgeführt wird. |
Beispiel Sortieren:
my_array.sort(my_sort);
Die Anweisung legt fest welche eigene Funktion die Reihenfolge der Sortierung bestimmen
soll (hier die eigene Funktion my_sort ).Beispiel Ajax:
ajax_obj.onreadystatechange = my_receive;
Die Anweisung legt fest, welche eigene Funktion beim
→ Ereignis (Event)
'Daten eingetroffen' ausgeführt werden soll (hier die eigene
Funktion my_receive ).
|
Private Methoden mit internen Funktionen |
|
|
Im Beispiel rechts wurde die Funktion umfang in das
Objekt integriert: Sie beginnt und endet innerhalb des Objekts. • Damit ist sie 'gekapselt' und nur mehr innerhalb des Objekts verwendbar. • Von außen (global) ist die Funktion nicht verwendbar, sie ist privat für das Objekt. Das ist wünschenswert, da gleichnamige Methoden für Objekte anderer Klassen (Rechteck, Dreieck) anders berechnet werden müssen. • Hier wird eine unterschiedliche Syntax verwendet: Die Funktion selbst braucht keinen eigenen Namen, sie wird direkt der Methode this.umfang zugewiesen. Live- |
Objekt kreis mit Eigenschaft r und
Methode umfang
function kreis(radius) {
this.r = radius;
}
this.umfang = function(){
return (2*this.r*Math.PI);
}
Anwendung:
var k = new kreis(20);
alert(k.r); alert(k.umfang()); |
ArgumenteEine Methode arbeitet wie eine Funktion, d.h. sie wird mit () aufgerufen und kann auch mit Argumenten verwendet werden.Bekannte Beispiele sind z.B. die Methoden der Standard-Klasse Math |
Verwendung von Methoden mit Argumenten in ()
var x = Math.sqrt(2);
var y = Math.round(Math.random()*100); var z = Math.pow(10,3); |
Private Variable und FunktionenInnerhalb einer Klasse können auch Variable und Funktionen verwendet werden.• Variable (hier gruss ) sind (nur) innerhalb der Klasse verfügbar, auch für alle privaten Methoden und Funktionen. • Funktionen tragen Namen (hier test ) und sind (nur) innerhalb der Klasse verfügbar. In einer derartigen Funktion sind die Eigenschaften der Klasse unbekannt, d.h. ein Austausch von Daten erfolgt über Argumente und die return-Anweisung. |
function kreis(radius) {
this.r = radius;
}
var gruss = "Hallo !"; this.umfang = function() {
return(2*this.r*Math.PI);
}test(); function test() {alert(gruss);} |
|
• Für beliebig viele verschiedene Objekte können gleichnamige Methoden mit jeweils unterschiedlicher Verarbeitung programmiert werden. • Die Methode kann nur innerhalb des Objekts verwendet werden. Daher ist es wesentlich einfacher, alle denkbaren Fälle zu berücksichtigen. Gekapselte Methoden sind viel weniger anfällig gegen Fehler. |
•
In professioneller Software werden darüber hinaus auch alle Eigenschaften gekapselt:
Sie sind nur mehr über Methoden wie (get_radius, set_radius)
zugänglich. Ein Beispiel: Im einfachen Objekt kreis kann man den Radius z.B. mit k.r = -123;
auf illegale Werte setzen. Wenn man dagegen set_radius(-123) anwenden
muss, dann enthält diese Methode bei guter Programmierung einige Kontrollen,
welche die Zuweisung eines illegalen Radius zuverlässig verhindern.
|
Gleichnamige Methoden für unterschiedliche Objekt-Klassen |
|
|
Das Beispiel rechts zeigt eine Kombination der oben gezeigten Beispiele. • Die beiden Kreise k1 und k2 sind ein Beispiel für die Verwendung mehrerer Objekte der gleichen Klasse. • Die Methoden umfang und flaeche zeigen, wie gleichnamige Methoden für unterschiedliche Objekte angewendet werden - und zwar mit jeweils anderer Berechnung. Zusätzlich sind einige Details ergänzt: • Die Argumente werden vor der Verwendung auf einfache Weise überprüft: Zuerst Umwandlung allfälliger Texte in Zahlen, danach Absolut-Wert zur Vermeidung negativer Werte. • Der || Operator (logisches ODER) dient dazu, der Eigenschaft einen Standard-Wert zuzuweisen, wenn bei der Initialisierung kein Argument mitgegeben wurde. |
Objekte kreis,rechteck - Mit verschiedenen Eigenschaften,
jedoch den gleichen Methoden umfang,flaeche
function kreis(radius) {
this.r = Math.abs(parseFloat(radius)) || 0;
}this.umfang = function() { return (2*this.r*Math.PI);
}this.flaeche = function() { return (this.r*this.r*Math.PI);
}
function rechteck(laenge,breite) {
this.a = Math.abs(parseFloat(laenge)) || 0;
}
this.b = Math.abs(parseFloat(breite)) || 0; this.umfang = function() { return (2*this.a+2*this.b);
}this.flaeche = function() { return (this.a*this.b);
}
|
|
Live- Die Variablen radius, laenge, breite werden für jeden Test mit Zufallszahlen erzeugt). |
Anwendung:
var k1 = new kreis(10);
var k2 = new kreis(20); var r = new rechteck(15,25); alert(k1.umfang); alert(k1.flaeche); alert(k2.umfang); alert(k2.flaeche); alert(r.umfang); alert(r.flaeche); |
Standard-MethodenMan kann eigene Ojekt-Klassen mit Standard-Methoden ausstatten. Das muss nicht einer bestimmten Verwendung entsprechen, liefert aber bei unbeabsichtigter, irrtümlicher oder impliziter Verwendung der Methode wenigstens einen Hinweis. |
Deklaration der Standard-Methode toString() für eine
selbst erstellte Objekt-Klasse:
this.toString = function() {return "Kreis-Objekt";}
|
Gleichnamige EigenschaftenAnalog zu den hier gezeigten gleichnamigen Methoden können Objekte verschiedener Klassen auch gleichnamige Eigenschaften erhalten. |
Beispiel: Ein Quadrat-Objekt (Seite a), ein Rechteck-Objekt (Seiten a, b) und ein Dreiecks-Objekt (Seiten a,b,c). Die Eigenschaft a ist in allen Objekten enthalten. |
|
Namens-Verwirrung
In zahlreichen Beispielen (Literatur, Internet) werden die gleichen Namen für
unterschiedliche Elemente verwendet.radius bezeichnet hier das Argument und die Eigenschaft, umfang bezeichnet Methode und Funktion • Es ist besser, die Elemente durch Vergabe unterschiedlicher Namen auseinander zu halten. Der Code wird besser verständlich, es treten keine der schwer zu entdeckenden Verwechslungen auf. |
Das Beispiel externe Funktion mit doppelt verwendeten Namen:
function kreis(radius) {
this.radius = radius;
}this.umfang = umfang; function umfang() { return 2*this.radius*Math.PI;
}
|
Methoden zum Lesen & (sicheren) Schreiben von Eigenschaften |
|
|
Das Beispiel zeigt eine Klasse kreis mit gekapselten
Methoden für den Zugriff auf die Eigenschaften. • Die Eigenschaft r wird zunächst auf den Standardwert (Zahl 0) initialisiert. • Wenn das Objekt ohne Argument erzeugt wurde (arguments.length==0), folgt keine weitere Initialisierungs-Aufgabe. • Wenn das Objekt mit Argument erzeugt wurde, dann wird dieses mit einer internen Funktion (hier check_r) geprüft. Nur zulässige Werte werden verwendet, in jedem anderen Fall bleibt die Eigenschaft unverändert. Bei Bedarf kann ein Fehler mit alert angezeigt werden. • Das Lesen aller Daten erfolgt nur mehr mit Methoden (get_radius, get_umfang, ..). • Das Schreiben aller Daten erfolgt ebenfalls nur mit Methoden (set_radius). |
function kreis() {
this.r = 0; // versteckte Eigenschaft
}
if(kreis.arguments.length>0) { this.r=check_r(this.r,kreis.arguments[0]);
}this.get_radius = function() {return this.r;} this.get_umfang = function() { return (2*this.r*Math.PI);
}this.set_radius = function(rneu) { this.r=check_r(this.r,rneu);
}function check_r(ralt,rneu) {
var ineu = parseFloat(rneu);
}
var ret = ralt; if(ineu>=0) {ret = ineu;} else{alert("Fehler...");} return ret; |
|
Bei derartiger Programmierung muss man keine der Eigenschaften kennen, da man
nicht mehr direkt darauf zugreift. Lesen und Schreiben von Eigenschaften erfolgt indirekt mit genau abgestimmten Methoden. |
Insbesondere beim Schreiben von Eigenschaften kann man potentielle Fehler abfangen. Das macht die Objekte wesentlich stabiler. |
|
Live- |
|
Optionale Argumente |
|
|
In gut programmierten Objekten ist die Angabe der Argumente stets optional: ► Man kann bei der Erzeugung eines neues Objekts Argumente übergeben, oder man kann ohne Argumente ein Standard-Objekt erzeugen. Das Beispiel rechts zeigt, wie das Objekt programmiert wird: ● An die beiden Eigenschaften (sa,sb) wird jeweils eines der Argumente (a,b) zugewiesen. ● Wenn eines der Argumente nicht existiert (undefined, null), dann sorgt der Oder-Operator || dafür, dass der zweite Teil der Anweisung ausgeführt wird. Nach dem Oder-Operator || steht der zu verwendende Standardwert - in diesem Fall die Zahl 0 (Null). In diesem Beispiel werden die Seiten eines neuen Rechtsecks sa=0 und sb=0 gesetzt, wenn keine Argumente übergeben wurden. ● Unabhängig davon ist es später möglich, die Eigenschaften auf andere Werte zu setzen. |
Rechteck-Objekt mit optionalen Argumenten
function rect(a,b) {
this.sa = a || 0;
}
this sb = b || 0; Anwendung mit Argumenten zur Erzeugung eines Objekts mit bestimmten Eigenschaften: r1 = new rect(12,34);
Anwendung ohne Argumente: Für fehlende Argumente werden Standardwerte eingesetzt:
r2 = new rect(56);
Änderung zu einem späteren Zeitpunkt
r3 = new rect(); r3.sa = 89;
|
|
Das Beispiel rechts zeigt eine andere Variante der Programmierung. ● Jede Funktion und jedes Objekt enthält das Sub-Objekt arguments In diesem → Array sind alle Argumente des Objekt-Aufrufs enthalten. ● Die Eigenschaft arguments.length gibt die Anzahl der übergebenen Argumente zurück (hier an die Variable nargs). ● Zunächst werden alle Eigenschaften auf ihre jeweiligen Standardwerte gesetzt (hier sa=0,sb=0). ● Das erste Argument arguments[0] wird nur dann an die Eigenschaft sa zugewiesen, wenn es überhaupt exisiert (wenn nargs>0). Diese einfache Variante (ohne Prüfung) programmiert man jedoch einfacher mit dem Oder-Operator (Absatz oben). ● Für das zweite Argument arguments[1] wird eine andere Variante gezeigt: • Hier wird nicht nur geprüft, ob dieses Argument übergeben wurde (wenn nargs>1), sondern das Argument wird vor seiner Verwendung überprüft. • Die Art der Prüfung richtet sich nach der Anwendung, außerdem kann der Wert des Arguments bei Überpfüfung geändert werden (z.B. Umsetzung in Klein- Großbuchstaben, Numerisch Absolutwert, Runden, etc...). • Kritische Tests (bei denen Fehler auftreten könnten) setzt man am besten in einen try-Block. • Nur dann, wenn alle Tests erfolgreich passiert wurden, wird das Argument an die Eigenschaft (hier sb) zugewiesen. |
Andere Variante mit Verwendung der arguments
function rect() {
Anwendung:
var nargs = rect.arguments.length;
}
this.sa = 0; this.sb = 0; if(nargs>0) { this.sa = rect.arguments[0];
}if(nargs>1) {
var test = rect.arguments[1];
}
try{
test = parseInt(test);
}if(test>=0 && test<=100) { this.sb = test;
}
catch(e) {}
r1 = new rect(12,34);
r2 = new rect(56); r3 = new rect(); |
JSON-Syntax(Javascript Object Notation) |
|
|
→ JSON bezeichnet
einen kleinen aber interessanten Teil der Standard Javascript Syntax. Hier wird gezeigt, wie Objekte der oben vorgestellten Klasse rechteck in JSON-Syntax formuliert werden. |
→ JSON kommt meist in
Verbindung mit → Ajax
zum Einsatz: Dabei werden Daten und Objekte samt dazugehörender Eigenschaften
und Methoden über das Internet an ein Javascript Programm gesendet. ♦ Details zu Ajax und JSON |
|
•
In dieser alternativen Syntax-Variante werden alle Elemente eines Objekts
in {} geschwungende Klammern eingeschlossen. • Die einzelnen Elemente (Eigenschaften, Methoden) werden voneinander mit , Beistrich getrennt. • Eigenschaften werden in dieser Form angegeben: name:wert
•
Methoden werden in dieser Form angegeben:
name:function() {}
•
Im Zweifel ist es sicherer, die Namen und Daten in ""
Anführungszeichen zu setzen:
"name": "wert"
• Das erste Beispiel rechts oben zeigt ein einfaches Objekt der Klasse rechteck (allerdings wird bei JSON kein Klassen-Name angegeben) mit den Eigenschaften der beiden Seiten a,b • Das zweite Beispiel darunter enthält zusätzlich die Methode flaeche Live- |
Definition eines Objekts r mit Eigenschaften (entspricht
einem einfachen rechteck-Objekt mit
Länge a und Breite b )
var r={a:12, b:34};
// var r={"a": "12", "b": "34"};
alert(r.a);alert(r.b); Definition eines Objekts r mit den Eigenschaften a,b und der Methode umfang
var r={a:12, b:34, flaeche: function() {return (this.a*this.b);}};
alert(r.a); alert(r.b); alert(r.flaeche); |
|
JSON wird vorzugsweise zusammen mit
→ Ajax verwendet. ♦ Details zur asynchronen Übertragung von Daten und Objekten an Javascript (Ajax). |
Beispiel für ein PHP Script-Programm zum
Senden eines Rechteck-Objekts in JSON-Syntax:
print "a:12, b:34";
|
|
•
Zur Decodierung der empfangenen Daten werden zunächst die meist noch
fehlenden geschwungenen {} Klammern angefügt. • Danach wird die Live-Interpretation der fertigen Anweisung mit eval ausgeführt. Das erzeugte Objekt r verhält sich genauso wie die in den anderen Beispielen (mit oder ohne JSON-Syntax) erzeugten Rechteck-Objekte - Der kleine Unterschied: Eigenschaften und Methoden wurden am Server erzeugt und via Internet an den Client gesendet. ♦ Details zu eval |
Beispiel für einen Ajax-Empfänger (Javascript) Verarbeitung eintreffender JSON-Texte zu einem Array: // Ajax+JSON Text trifft ein:
var atxt = ajax_obj.responseText;atxt = "var r = {"+atxt+"}"; // Text intrepretieren
eval(atxt);
|
Ajax + JSONwerden dazu verwendet, um variable (dynamische) Webseiten herzustellen, die besonders schnell und flexibel interaktiv reagieren können.Dabei bleibt die Webseite geladen, und bei Bedarf wird jeweils nur ein kleiner Teil geändert - mit Live (asynchron) angeforderten Daten. |
Wegen der Möglichkeit, ganze Objekte inklusive Eigenschaften und Methoden genau an die aktuellen Anforderungen des Clients anzupassen, werden nur wenige Daten gesendet, die aber höchst effizient eingesetzt werden können. |
Javascript-BibliothekAlternativ ist es möglich, Javascript-Code in einer eigenen Datei *.js zu konzentrieren. Diese Datei (Javascript-Library) kann von jeder Webseite geladen werden, z.B.
<script type="text/javascript" src="lib.js"></script>
Eine externe Javascript-Datei wird im <head> einer
Webseite geladen, vor den eigenen Javascript-Programmen.
So ist es möglich, in den eigenen Programmen die bereits vorher geladenen
Anweisungen zu ergänzen und bei Bedarf zu überschreiben.Fast alle Seiten dieses Webs verwenden eine oder mehrere derartige Bibliotheken. |
Ajax+JSON:
Nur die tatsächlich benötigten Daten und Objekte werden übertragen.• Vorteil, wenn nur wenige Daten aus einem großen Vorrat (Datenbank) benötigt werden, oder wenn die Objekte sehr variabel sind. • Nachteil, wenn die gleichen Daten oder Objekte mehrfach benötigt werden - Sie werden jedesmal neu übertragen (nur in Ausnahme-Fällen aus dem Cache-Speicher bezogen). Javascript-Bibliothek:
Alle enthaltenen Klassen, Objekte, Funktionen und Daten werden übertragen.• Vorteil für Elemente, die mehrfach oder von mehreren Webseiten verwendet werden. - Sie werden nur einmal übertragen und dann aus dem Cache-Speicher des Browsers entnommen. |
|
|
Wikipedia:
Objektorientierung,
Klasse,
Konstruktor,
Eigenschaft (Attribut),
Methode,
objektorientierte Programmiersprachen,
Javascript
|
|
|