OOP mit JavaScript - Prototypen - this und that
1. Private Methoden und Eigenschaften
Hier gelten zunächst mal dieselben Regeln wie für alle Konstruktorfunktionen. Nämlich, dass man außerhalb derselben nicht auf die
privaten Eigenschaften und Methoden zugreifen kann. Gut, das geht bei Klassen in PHP ja auch nicht. In JavaScript kommt halt noch
diese idiotische Sache mit dem this
und window
hinzu.
2. this
und that
Innerhalb einer Konstruktorfunktion kann man ja mit einer internen Referenz à la var that = this;
arbeiten, wenn private
Methoden auf öffentliche Eigenschaften oder Methoden zugreifen sollen. Clevere Kerlchen könnten nun auf die Idee kommen und das auch bei
Prototypen einsetzen. Anstelle eines var
wird dagegen ein this
genommen. Also so.
function Kampfpanzer()
{
this.that = this;
var besatzung = 4;
}
function SpezialPanzer()
{
this.kanone = 220;
this.machWas = function()
{
alert (this.that.besatzung);
}
}
SpezialPanzer.prototype = new Kampfpanzer;
var supipanzer = new SpezialPanzer;
supipanzer.machWas();
Denkste!
Leider bekommt man hier das übliche undefined
um die Ohren genauen. Bei einem console.log(this.that)
anstelle
des alert
könnt ihr im Firebug an der Konsole auch wunderbar sehen, dass da ein besatzung
nicht auftaucht.
3. Noch etwas Wichtiges
Wenn man innerhalb(!) einer Konstruktorfunktion mit var that = this;
arbeitet, so gilt es noch eine Feinheit zu beachten.
Dazu nehmen wir den folgenden Code. Ach ja, lasst euch von der zweiten Zeile nicht irritieren, die kann tatsächlich vor den
Konstruktorfunktionen stehen. Das hat aber gar nichts mit dem eigentlichen Problem zu tun.
// so was funktioniert übrigens auch
SpezialPanzer.prototype = new Kampfpanzer;
function Kampfpanzer()
{
var that = this;
this.kanone = 120;
this.ballern = function()
{
schiessen();
}
function schiessen()
{
alert ('Bumm bumm mit ' + that.kanone + 'mm-Kanone');
}
}
function SpezialPanzer()
{
this.kanone = 220;
}
var kampfpanzer = new SpezialPanzer;
kampfpanzer.ballern();
Hä!
Ja genau. Hä? Denn im Gegensatz zu dem Beispiel hier liegt das Kaliber nicht bei
220
sondern nur bei 120
. Und auch dieses angebliche Mysterium lässt sich ganz einfach erklären. Denn
this
verweist ja immer auf das eigene(!) Objekt. In diesem Fall also Kampfpanzer
. Und der hat halt nur so eine
kleine Wumme.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt