OOP/DOM-Scripting JavaScript - Praxistutorial 2 - array_reverse
1. Die Abschnitte
- Einführung
- Grundprinzip
- in_array
- array_keys
- array_reverse
2. Und noch eine Besonderheit
Kommen wir nun zu einem ganz besonderen Problem. Wir wollen jetzt die PHP-Funktion array_reverse
für JavaScript nachbauen.
Aus lauter Faulheit nennen wir die Methode aber nur reverse
.
Array.prototype.reverse = function ()
{
var tmp_arr = new Array();
for (var i = this.length - 1; i >= 0; i--)
{
tmp_arr.push (this[i]);
}
return tmp_arr;
}
test = arr_2.reverse();
alert (test);
Erläuterung
Obiger Code funktioniert bei JavaScript nur mit fortlaufendem numerischem Index bei Arrays. Zu der grundsätzlichen Problematik könnt
ihr euch hier informieren. Wir laufen also rückwärts durch das Array und hängen die
einzelnen Werte wie gehabt mit push
an tmp_arr
an. Die zusätzlichen Methoden werden natürlich nicht
berücksichtigt, da sie keinen numerischen Index haben.
3. Und ein dickes Aber!
Die Methode reverse
gibt es schon bei JavaScript. Und sie macht genau das, was wir hier nachprogrammiert haben. Inklusive der
fehlenden Fähigkeit, "assoziative" Arrays zu durchlaufen.
Was ist jetzt passiert?
Ganz einfach. Wir haben eine bereits existierende Funktion/Methode mittels prototype
überschrieben! Allerdings gibt es noch
eine Besonderheit. Sie wird nicht im Array-Objekt als zusätzliches Element gespeichert. Ruft mal wieder spaßeshalber in_array
samt alert
-Ausgabe auf. Da wird euer reverse
nicht erscheinen! Warum? Ach, keine Ahnung, ich werde diese Sprache
eh nie wirklich verstehen.
Ein Tipp
Überschreibt niemals per prototype
etwas, was eh schon existiert. Damit werdet ihr eure Kollegen unter Umständen in den
Wahnsinn treiben. Wenn euch eine bereits vorhandene Funktion mit ihren Möglichkeiten nicht gefällt, so baut euch eine neue unter
anderem Namen. In diesem Fall könntet/solltet ihr euch an PHP orientieren und sie array_reverse
nennen.
Array.prototype.array_reverse = function ()
{
...
}
4. Ich hoffe
..., ich habe euch einen ersten Einblick in das Prototyping geliefert. Eigentlich ist es meiner Meinung nach ein ziemlich kruder Ansatz, der nur einen Zweck erfüllen soll. Die fehlenden Möglichkeiten von JavaScript sollen wir mal schön selber nachprogrammieren.