siGGi: node-Objekt per prototype im IE erweitern

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 ;-).

  1. 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

    1. Hallo,

      Kennst du den Artikel: http://aktuell.de.selfhtml.org/artikel/javascript/oomodell/index.htm#internal?

      Der wird ihm nicht weiterhelfen.

      Mathias

  2. 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

    1. 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

      1. 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

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. 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

          1. 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.

            --
            Javascript ist toll (Perl auch!)