node-Objekt per prototype im IE erweitern
siGGi
- javascript
0 H-P Ortner0 molily
0 molily
0 H-P Ortner2 wahsaga0 H-P Ortner1 Struppi
Hallo allerseits,
ich möchte gerne das node-Objekt erweitern. Unter FF funktioniert das wunderbar:
Node.prototype.meineMethode = function() { ... }
Im IE kommt die Meldung:
"Das Objekt unterstützt die Eigenschaft oder Methode nicht."
Kann ich das trotzdem zum Laufen bringen?
Natürlich könnte ich das ganze einfach über Funktionen machen und anstatt nachher z.B. this.meineMethode() zu schreiben meineFunktion(this) zum aufrufen verwenden, aber irgendwie finde ich hat das 1. was ;-).
Hallo siGGi!
ich möchte gerne das node-Objekt erweitern. Unter FF funktioniert das wunderbar:
Node.prototype.meineMethode = function() { ... }
Im IE kommt die Meldung:
"Das Objekt unterstützt die Eigenschaft oder Methode nicht."
Kann ich das trotzdem zum Laufen bringen?
Kennst du den Artikel: http://aktuell.de.selfhtml.org/artikel/javascript/oomodell/index.htm#internal?
Hab es aber auch noch nicht probiert.
Viele Grüße
H-P Ortner
Hallo,
Kennst du den Artikel: http://aktuell.de.selfhtml.org/artikel/javascript/oomodell/index.htm#internal?
Der wird ihm nicht weiterhelfen.
Mathias
Hallo,
Node.prototype.meineMethode = function() { ... }
Im IE kommt die Meldung:
"Das Objekt unterstützt die Eigenschaft oder Methode nicht."Kann ich das trotzdem zum Laufen bringen?
Nein.
Natürlich könnte ich das ganze einfach über Funktionen machen und anstatt nachher z.B. this.meineMethode() zu schreiben meineFunktion(this) zum aufrufen verwenden, aber irgendwie finde ich hat das 1. was ;-).
Deshalb umschließen Prototype, jQuery und andere JavaScript-Frameworks alle Objekte erst einmal mit einer Funktion, meist »$«. Das heißt, $(element) fügt dem Element automatisch einige Methoden hinzu, sodass $e(lement).meineMethode() funktioniert. Das ist alles der fehlenden prototypischen Erweiterbarkeit im IE geschuldet.
Mathias
Hallo Mathias!
Node.prototype.meineMethode = function() { ... }
"Das Objekt unterstützt die Eigenschaft oder Methode nicht."
Kann ich das trotzdem zum Laufen bringen?
Nein.
Ich dürfte da die Frage missverstanden haben.
Ich dachte das Ziel wäre es einem Node eine neue Funktion beizubringen, damit das eben mit node.funktion() aufgrufen werden kann.
Und das würde ich so lösen:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Node-Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
<script type="text/javascript">
<!--
var i=0;
function insertCheckbox(){
i++;
var ch1= document.createElement("input");
ch1.type= "Checkbox";
ch1.name= "ChB" + i;
ch1.id= "ChB" + i;
ch1.value= "ChB" + i;
var lb1= document.createElement("label");
lb1.htmlFor= "ChB" + i;
lb1.appendChild(document.createTextNode("ChB" + i));
document.getElementById("Form1").appendChild(ch1);
document.getElementById("Form1").appendChild(lb1);
document.getElementById("Form1").appendChild(document.createElement("br"));
}
function lernen() {
document.getElementsByTagName("body")[0].setAttribute("anfuegen", insertCheckbox);
}
function ausfuehren() {
document.getElementsByTagName("body")[0].anfuegen();
}
-->
</script>
</head>
<body>
<input type="button" name="1" onClick="ausfuehren();" value="Methode ausführen"/>
<input type="button" name="2" onClick="lernen();" value="Methode lernen"/>
<form name="Form1" id="Form1">
</form>
</body>
</html>
Ohne "lernen()" kennt der Node "body" die Funktion "ausfuehren()" nicht, nacher schon.
Das mit den Prototypen ist mir noch nicht klar.
Viele Grüße
H-P Ortner
hi,
Ich dachte das Ziel wäre es einem Node eine neue Funktion beizubringen, damit das eben mit node.funktion() aufgrufen werden kann.
Nicht _einem_ Node, sondern _jedem_ Node.
Das mit den Prototypen ist mir noch nicht klar.
Über eine prototype-Methode kannst du mit einer _einmaligen_ Anweisung bzw. Definition dafür sorgen, dass _alle_ Instanzen dieses Objekttyps anschließend über die entsprechende Methode verfügen, ohne sie jedem einzelnen verpassen zu müssen. Und außerdem gilt das nicht nur für anschließend neu erzeugte Instanzen dieses Objektes, sondern auch für alle bereits vorher schon bestehenden.
gruß,
wahsaga
Hallo wahsaga und Mathias!
Über eine prototype-Methode kannst du mit einer _einmaligen_ Anweisung bzw. Definition dafür sorgen, dass _alle_ Instanzen dieses Objekttyps anschließend über die entsprechende Methode verfügen, ohne sie jedem einzelnen verpassen zu müssen. Und außerdem gilt das nicht nur für anschließend neu erzeugte Instanzen dieses Objektes, sondern auch für alle bereits vorher schon bestehenden.
Tolles Konzept – kannte ich noch nicht.
Schade dass es der IE nicht richtig unterstützt.
Viele Grüße
H-P Ortner
Tolles Konzept – kannte ich noch nicht.
Eine Grundlage des OOP Konzept von Javascript.
Schade dass es der IE nicht richtig unterstützt.
Naja, das stimmt so nicht, er ünterstützt es nicht bei Browserinternen Objekten, ansonsten hat auch der IE keine Probleme damit.
Struppi.