Methoden sind eigentlich nichts anderes als Funktionen welche an ein Objekt
gebunden sind. Sie werden verwendet um gewisse Eigenschaften zu verändern oder
sonstige Aktionen durchzuführen. Innerhalb der jeweiligen Methoden hat man wiederum
über this Zugriff auf das aktuelle Objekt.
Es gibt verschiedene Arten von Methoden, Sie unterscheiden sich hauptsächlich
durch die verschiedene Verfügbarkeit, dass heisst Sie können zum Teil nur Objektintern
oder aber global verwendet werden. Ausserdem haben nicht alle die gleichen Zugriffsrechte
auf private Eigenschaften.
Öffentliche Methoden welche allen Instanzen einer Klasse angehören sollen werden im Prototype des Konstruktors definiert, sie sind von überall verwendbar, haben aber keinen Zugriff auf private Eigenschaften oder Funktionen.
Car = function(model){
this.model = model; // public instance property
}
Car.prototype.weehl = 4; // public class property
Car.prototype.getModel = function(){ // public method for all instances
return this.model;
}
Private Variablen wie auch Private Funktionen werden mittels var
innerhalb der jeweiligen Eltern - Funktion definiert. Im folgenden Abschnitt
wird eine private Variable weehl angelegt welche nur über die private
Funktion puncture() oder über eine privilegierte
Methode angesprochen werden kann. Private Variablen sind an die jeweilige
Instanz gebunden und verlieren ihren Wert nach verlassen der Funktion nicht.
Die private Funktion puncture ihrerseits kann nur von einer privilegierten Methode
oder dem Konstruktor selbst aufgerufen werden.
Car = function(){
var weehl = 4; // private property
var puncture = function(){ // private function
weehl--;
}
}
myCar = new Car();
alert(myCar.weehl) // undefined
alert(myCar.puncture()) // error
alert(Car.weehl) // undefined
alert(Car.puncture()) // error
Allein sind solche Private Eigenschaften relativ nutzlos, sie werden erst interessant im Zusammenspiel mit privilegierten Methoden.
Privilegierte Methoden werden innerhalb des Konstruktors deklariert, sie können von ausserhalb aufgerufen werden und haben Zugriff auf private Eigenschaften und Funktionen. Sie bilden also gewissermassen das Bindeglied zwischen der "Aussenwelt" und den Privaten Eigenschaften.
Car = function(){
var weehl = 4; // private variable
var puncture = function(){ // private function
weehl--;
}
this.privileged = function(){ // privileged method
return puncture();
}
}
myfirstcar = new Car()
alert(myfirstcar.privileged()) // 3
mysecondcar = new Car()
alert(mysecondcar.privileged()) // 3
alert(mysecondcar.privileged()) // 2
alert(myfirstcar.weehl) // undefined
alert(Car.weehl) // undefined