JavaScript Objekte um Funktionen (Methoden) erweitern

JavaScript ist eine objektbasierte Sprache. Mit Objektorientierung hat das insofern nur etwas zu tun, als das man Objekten gewissen (neue) Eigenschaften zuordnen kann.


Ein kleines Beispiel:

<script type="text/javascript">

/* Code, um dem String-Objekt Rueckwaertsschreiben beizubringen */

// Mit dieser Funktion dreht man einen String um

function rueckwaertsschreiben()
{
for (i=this.length-1;i>=0;i--);
document.write(this.charAt(i));
}

String.prototype.writeback=rueckwaertsschreiben;

</script>

Hier erkennt man, dass man jedes Objekt, welches entweder existiert, oder welches man neu erstellt hat, um Funktionen erweitern kann.

Mancher fragt jetzt: Wie definiere ich mir denn ein eigenes Objekt. Hier ist Antwort:

<script type="text/javascript">

function meinObjekt()
{
this.meineFarbe = "rot";
}

meinObjekt.prototype.farbeAendern = function(param)
{
this.meineFarbe = param;
}

</script>

Na jetzt fehlt ja nur noch, wie ich mir ein neues Objekt aus der neuen Definition erstelle und die Methoden anwende:

<script type="text/javascript">

var o = new meinObjekt();
//Jetzt hat das Objekt die Farbe "rot", wird zu blau und ausgegeben.
o.farbeAendern("blau");
alert(o.meineFarbe);

</script>
This entry was posted in JavaScript. Bookmark the permalink.

3 Responses to JavaScript Objekte um Funktionen (Methoden) erweitern

  1. Das erste Beispiel ist bad practice da Native Objekte nur erweitert werden sollten alte ECMAScript Implementierungen mit Funktionen aus neueren ECMAScript Versionen auszustatten. So z.B.

    if ( !Array.prototype.forEach ) {
    Array.prototype.forEach = function(fn, scope) {
    for(var i = 0, len = this.length; i < len; ++i) {
    fn.call(scope || this, this[i], i, this);
    }
    }
    }

    (Von der MDN Website: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach)

    • admin says:

      Hier handelt es sich ja um die Erweiterung um die Funktion “writeback()”, die es im Standard ECMAScript in dieser Form nicht gibt. Somit ist es, wie Du schon sagst, eine Ergänzung des Objekts und keine Überschreibung von Funktionalität.

      • Maximilian Ruta says:

        Genau das ist das Problem. Die Funktion gibt es in keinem ECMAScript Standard. Native Objekte sollten wie bereits gesagt nur um Methoden erweitert werden um die Funktionalität aus zukünftigen ECMAScript Versionen in älteren Versionen zu emulieren und so eine gewisse Vorwärtskompatibilität herzustellen.

Leave a Reply

Your email address will not be published. Required fields are marked *