2010-11-18 3 views
5

Ich habe einige JavaScript-Code, getElementsByAttribute eine Funktion wie folgt definiert:Object.prototype in JavaScript

Object.prototype.getElementsByAttribute = function(attr) { 
    var children = this.all || this.getElementsByTagName('*'), 
     ret = [], i, c; 
     for(i=0; i<children.length; i++) { 
      c = children[i].getAttribute(attr); 
      if(typeof c == "string" && c != "") 
       ret.push(children[i]); 
     } 
    return ret; 
} 

Diese in allen Browsern funktioniert ich getestet haben, mit Ausnahme des Internet Explorer 7 (und vermutlich niedriger) - diese browers throw "Objekt unterstützt diese Eigenschaft oder Methode nicht."
Das einzige, was ich denke, dass es nicht so ist, dass die Objekte bereits erstellt wurden, als ich die Prototyp-Funktion definiert ...
Shrot der Definition der Funktion als ... nun, ein "normales" Funktion und Weitergabe des Elements als Argument, gibt es eine Möglichkeit, dies in IE7 und darunter zu arbeiten?

Antwort

6

IE DOM-Elemente sind keine normalen JavaScript-Objekte und erben keine Prototypen wie erwartet.

http://perfectionkills.com/whats-wrong-with-extending-the-dom/

+0

Danke - Gut, dass ich dieses Zeug nicht oft benutze und es gibt schon Fallbacks! –

+0

Aber er versucht nicht, den Prototyp von DOM-Elementen hinzuzufügen, er fügt dem Prototyp von Object hinzu, ganz anders. –

+0

@torazaburo: Ja, aber er erwartet, dass DOM-Elemente "Object.prototype" erben. Sie nicht. – SLaks

1

Dinge Object.prototype Hinzufügen ist ein wirklich schlechte Idee. Es wird zu alle Objekt hinzugefügt, und das wird unbeabsichtigtes Verhalten verursachen, ich garantiere es.

Definieren Sie einfach Ihre Funktion und dekorieren Sie sie auf alle Objekte, die Sie dynamisch benötigen.

+0

Okay, neu definiert es als eine normale Funktion. Danke :) –

+0

@Kolink, der Vorschlag war * nicht *, es als eine normale Funktion neu zu definieren, obwohl das eine vernünftige Sache zu tun ist, aber eher, es zu den Gegenständen hinzuzufügen, die du es anrufst. –

Verwandte Themen