Lieber WernerK,
ich glaube, Du hast gerade die Antwort auf meine Frage gegeben...
if (window.Node && Node.prototype && !Node.prototype.contains) {
Node.prototype.contains = function (arg) {
return !!(this.compareDocumentPosition(arg) & 16);
};
}
>
> Wenn man diesen mit einbaut, dann funktioniert das auch im Firefox.
> Nur verstehe ich da nur Banhof.
Bei "prototype" kann ich Dir weiterhelfen, bei "compareDocumentPosition" (noch) nicht.
> Ich weiss, für einen Anfänger in JS ist dies vermutlich ein wenig zu hoch :-)
Also spätestens bei "prototype" muss ein Anfänger zwangsläufig überfordert sein.
Die Idee hinter prototype ist folgende: In JavaScript existieren verschiedene Baupläne für Objekttypen. Du hast sicherlich schon Anweisungen gesehen, die in etwa so aussehen:
`var a = new Array();`{:.language-javascript}
Hier wird mittels der Konstruktor-Funktion "Array" eine neue Instant eines Objektes geschaffen, dessen Aufbau in der Konstruktor-Funktion geregelt wird. "a" ist nun ein neues Array. Soweit klar?
Die Konstruktor-Funktion "Array" ist ein nativer Bestandteil von JavaScript. Die kann man so nicht einsehen (probiere doch einmal in der Adresszeile Deines Browsers "javascript:alert(Array)" einzugeben), jedoch kann man den Bauplan eines Arrays grundsätzlich erweitern. Und dazu braucht man "prototype".
~~~javascript
Array.prototype.meineErweiterung = function (param) {
alert(
"Anzahl Elemente im Array: "
+ this.length
+ "\n\nAn dieses Array übergebener Parameter: '"
+ param
+ "'"
);
}
Obige Funktionsdefinition definiert eine Funktion, die einen Parameter in der Variablen "param" entgegennimmt. Im Funktionskörper (oder wie man das zwischen den geschweiften Klammern nennt) steht eine alert-Anweisung, die eine Zeichenkette ausgibt. Diese Zeichenkette wird aus Einzelteilen zusammengesetzt, unter denen auch "this.length" steht. "this" innerhalb einer Funktion verweist grundsätzlich auf das Objekt, dem diese Funktion als Methode angehört. Bei einfachen selbstdefinierten Funktionen ist das das window-Objekt, in diesem Falle das Array-Objekt, dem wir diese Funktion über "prototype" als Methode verliehen haben.
Auch bei selbstdefinierten Objekten kann man den existierenden Bauplan mittels prototype erweitern.
function Auto (farbe) {
this.farbe = farbe;
this.start = function () {
alert("brumm, brumm, brrrrrrrummmmmmmmmmmmm!"
+ " ("
+ this.farbe
+ "er Rauch steigt auf)"
);
};
return this;
}
Auto.prototype.preis = "100000 Euro";
Auto.prototype.motor = "Ottomotor";
var meinAuto = new Auto("grün");
alert(
"Mein Auto ist "
+ meinAuto.farbe // im Konstruktor definierte Eigenschaft
+ " und hat "
+ meinAuto.preis // über prototype hinzugefügte Eigenschaft
+ " gekostet. In ihm läuft ein "
+ meinAuto.motor // im Konstruktor definierte Methode
+ "."
);
meinAuto.start(); // meldet "brumm, brumm, brrrrrrrummmmmmmmmmmmm! (grüner Rauch steigt auf)"
Liebe Grüße,
Felix Riesterer.
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)