Ajaxer

coding at the front{end}

JavaScript als funktionale Programmiersprache – Teil 5 – this

| Keine Kommentare

this

Neben dem Bonusparameter arguments besitzt jede Funktion [außerdem] die Variable this. In einer objektorientierten Programmiersprache wie Java ist this meist das eigene Objekt. Dies ist in JavaScript oft, aber nicht immer der Fall.

Die this-Variable wird erzeugt, wenn eine Funktion aufgerufen wird.

Wenn eine Funktion als reine Funktion, d.h. nicht als Methode eines Objekts, aufgerufen wird, dann wird this mit dem globalen Objekt belegt. Das globale Objekt enthält – grob gesagt – alle globalen Variablen.

Allerdings kann die this-Variable (z.B. bei Objekten) einen anderen Kontext haben. Dies ist eine nützliche Eigenschaft, denn so kann man eine Funktion in verschiedenen Kontexten wiederverwenden und hat trotzdem innerhalb der Funktion einen Bezug zum Kontext, in dem die Funktion (z.B. als Methode) aufgerufen wurde.

Wenn man als Programmierer den Inhalt der Variablen this beim Aufruf einer Funktion bestimmen möchte, dann ist das über das Funktionsobjekt möglich. Funktionen in JavaScript sind vollwertige Objekte. Sie sind abgeleitet vom Prototyp Function. Das Funktionsobjekt besitzt die Methoden call und apply.

Sowohl in der apply-Methode als auch in der call-Methode lässt sich der Wert der this-Variablen übergeben. Alle weiteren Parameter, die der call-Methode übergeben werden, entsprechen den Parametern der Funktion. So ist es möglich, eine Funktion in einem bestimmten Kontext, der durch die this-Variable festgelegt wird, aufzurufen.

    
function returnThis() {
       return this;
}
console.log(returnThis()); // [object global]
console.log(returnThis.call("Hello")); // Hello

Der apply-Methode wird statt einer beliebigen Anzahl von Parametern das arguments-Array übergeben.

Mehr zu Kontexten und Objeken findet man in den folgenden Kapiteln [daher an dieser Stelle eine Zusammenfassung]!

Auf den aktuellen Kontext greift man über this zu. Dies ist:

  • globaler Namensraum bei Funktionsaufruf
  • Objekt-Namensraum des zu erzeugenden Objekts bei Konstruktor-Funktion
  • Objekt-Namensraum bei Methodenaufruf
  • Aufrufer-Objekt bei gebundenen Events (im Browser)
  • definierbarer Namensraum durch call und apply

Cover-klein in JavaScript als funktionale Programmiersprache - Teil 5 - this - AjaxerDies ist eine autorisierte Leseprobe aus dem Buch Oliver Ochs – JavaScript für Enterprise-Entwickler: Professionell programmieren im Browser und auf dem Server – dpunkt.verlag GmbH 2012. Weitere Leseproben folgen in Kürze.

Im nächsten Blogbeitrag werden wir uns geschachtelten Scopes und dem globalen Namensraum widmen.

Autor: Oliver Ochs

Oliver Ochs ist bei der Management- und IT-Unternehmensberatung Holisticon AG in Hamburg tätig. Er beschäftigte sich in den letzten Jahren mit Content Management Systemen, Webframeworks und Portalen auf Java-Basis. In diesem Umfeld arbeitete er als Entwickler, Architekt und Projektleiter. Er hat darüber hinaus Erfahrungen in Schulungen und Coachings. In letzter Zeit setzte er einen seiner Schwerpunkte auch auf Web- Application-Security, Identity-Management und neue Seiten von JavaScript. Ein anderer persönlicher Schwerpunkt sind agile Methoden und Prozesse

Schreib einen Kommentar

Pflichtfelder sind mit * markiert.