OOP in JavaScript

Methoden

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.

Public

Ö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 und Funktionen

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

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