17. Dezember 2013 | Leave a comment Letzte Woche bin ich kurz darauf eingegangen, wie wir (native) javascript Objekte mit eigenen Methoden erweitern können – Heute dagegen gehe ich darauf ein, wie wir Methoden überschreiben können. Egal ob nativ oder nicht. Aber vorsicht: solltet ihr Frameworks einsetzen, die sich auf bestimmte Methoden verlassen, dürfen diese unter keinen Umständen überschrieben werden! Warum sollte ich native Javascript Objektmethoden überschreiben? Das kann so einige Hintergründe haben – Zum Beispiel dürften alle unter euch die Funktion „alert“ kennen… Stellt euch nun vor, ihr entwickelt eine große Applikation die sich wie eine native Anwendung anfühlen soll. Da machen die (teils sehr verschiedenen) Browser alerts keine so schöne Figur. Das gleiche gilt übrigens für „confirm“ und „prompt„… Natürlich gibt es für diese UI Elemente vorgefertigte Framework Plugins ohne Ende – Doch was, wenn ihr in ein existierendes Projekt einsteigt in dem die nativen Funktionen verwendet werden und ihr sollt (möglichst schnell natürlich) eine eigene Lösung einbauen? In diesem Szenario könnte man die nativen Methoden überschreiben und somit als „wrapper“ benutzen! Okay, wie schaut das ganze also aus? Natürlich zeige ich euch auch Heute wieder ein paar Quelltext-Ausschnitte. So wie in diesem Ausschnitt lassen sich beispielsweise die nativen Funktionen überschreiben: // Our UI Popup API: UI.alert("A nice UI alert"); // Overwrite the native alert method. window.alert = UI.alert; alert('Also a nice UI alert'); // Will open a "UI.alert". Genau das gleiche könnten wir nun natürlich noch für „confirm“ und „prompt“ machen: // Our UI Popup API: window.alert = UI.alert; window.confirm = UI.confirm; window.prmopt = UI.prompt; Das ganze sieht aus, wie eine einfache Zuweisung von Variablen, nicht wahr? Passt auf, was ihr überschreibt! Überschreibt ihr z.B. die Methode Array.prototype.concat mit einer eigenen Methode, die ggf. nicht so funktioniert wie die echte ist es sehr wahrscheinlich das diverse Frameworks / Bibliotheken nicht mehr korrekt arbeiten. Das gleiche gilt natürlich für Funktionen wie z.B. Math.random oder Function.prototype.arguments, usw. die Liste ist zu lang 😉 Mit diesem Wertvollen Wissen verabschiede ich mich für diese Woche! Ich würde mich freuen wenn ihr auch nächste Woche wieder vorbei schaut und wünsche euch eine angenehme Weihnachtszeit und natürlich „Happy Coding„!