Cheatah: Verständnisproblem bei OOP mit Javascript

Beitrag lesen

Hi,

Was passiert in dieser Zeile?

var Hintergrund = new Farbe("E0", "FF", "E0");

  
ändern wir es mal ein bisschen:  
  

function Farbe (R, G, B) {
  this.R = R;
  this.G = G;
  this.B = B;
  this.hex = "#";
  this.toString = function() { return this.hex+this.R+this.G+this.B; }
  return 'Fertig';
}

  
Man beachte das "return" in der letzten Zeile - es wird nur für diese Demonstration gebraucht. Nun machen wir den Aufruf:  

alert(new Farbe("E0", "FF", "E0"));
alert(    Farbe("E0", "FF", "E0"));

  
Das alert() bewirkt, dass implizit eine toString()-Methode aufgerufen wird, da es nur einen String ausgeben kann.  
  
Vergleiche die Ergebnisse der beiden Aufrufe. Denke über sie nach - und stelle Deine Rückfragen ;-)  
  

> Sind durch diese Zuweisung die Eigenschaften von Farbe auch die von Hintergrund?  
  
"Farbe" ist eine Funktion. In diesem Kontext ist es das, was dem aus der OOP bekannten Begriff "Klasse" am nächsten kommt. "Hintergrund" ist eine Instanz der Klasse "Farbe". Die Klasse wird durch die Instanz nicht verändert. Wäre es anders, wäre es nicht objektorientiert.  
  

> Wenn ich jetzt die Eigenschaften R,G und B von Farbe ändere, wirkt sich das dann auch auf zum Beispiel Hintergrund.R aus?  
  
JavaScript verfolgt das Prototype-Modell, d.h. es gibt in der Tat einen Weg, alle Instanzen (und alle abgeleiteten Klassen) einer Klasse nachträglich zu verändern. Bei dem, was Du beschrieben hast, passiert dies jedoch nicht.  
  
Cheatah  

-- 
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|  
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html  
X-Will-Answer-Email: No  
X-Please-Search-Archive-First: Absolutely Yes