Den Prototyp von DOM-Elementknoten erweitern?

8

Ich weiß, wie man jedem Objekt neue Methoden hinzufügt - indem man den Prototyp des Objekts erweitert:

%Vor%

Aber ist es möglich, nur neue Methoden für DOM-Elementknoten zu definieren? Haben DOM-Elementknotenobjekte einen Prototyp? Oder gibt es vielleicht einen Prototyp für DOM-Knoten im Allgemeinen?

Oder existieren Prototypenobjekte nur für eingebaute Objekte?

    
Šime Vidas 16.11.2010, 11:48
quelle

3 Antworten

20

Ja, aber nicht in allen Browsern. Internet Explorer 8 unterstützt DOM-Prototypen (bis zu einem gewissen Grad), ebenso wie Firefox, Chrome, Opera und Safari.

%Vor%

Viele halten es für eine schlechte Übung, DOM-Objekte über ihren Prototyp zu erweitern. Kangax hat einen großartigen Artikel zu diesem Thema: Ссылка . Mit DOM-Prototypen können wir jedoch standardbasierte Methoden in Umgebungen implementieren, die sie noch nicht unterstützen, ähnlich wie Shims für ECMAScript 5th Edition-Methoden.

    
Andy E 16.11.2010, 11:57
quelle
3

In einigen Browsern stellen DOM-Elemente ein Prototyp-Objekt zur Verfügung, das auch von Object.prototype erben kann, aber dies ist nicht allgemein zutreffend (z. B. IE nicht). Im Allgemeinen sind Host-Objekte wie DOM-Elemente nicht dazu verpflichtet; Tatsächlich sind Host-Objekte nicht an viele der Regeln gebunden, die für native JavaScript-Objekte gelten. Daher sollten Sie sich niemals auf DOM-Elemente verlassen, um diese Art von Dingen zu unterstützen.

Ich empfehle kangax's exzellenten Artikel zu diesem Thema .

    
Tim Down 16.11.2010 12:00
quelle
0

Das ist genau das, was prototype.js tut, aber jetzt als extrem schlechte Praxis angesehen wird. Es ist viel besser, Wrapper / Handler zu verwenden. Beachten Sie, dass das Erhöhen der Anzahl der systemeigenen Objekte, insbesondere des Objekts Object , eine schlechte Übung ist.

lesen:

Was ist falsch daran, das DOM zu erweitern?
Object.prototype ist verboten

Nachtrag:

Während native Objekte in kleinen Projekten erweitert werden, kann es als sicher angesehen werden, es wird jedoch zu einem extrem schlechten Habbit. Es ist nur marginal weniger schlimm, als den globalen Geltungsbereich mit Funktionen und Variablen zu überschütten. Es treten nicht nur Namenskollisionen, sondern auch Implementierungskollisionen auf. Dies wird umso mehr möglich, je mehr Bibliotheken Sie zusammenstellen.

Wenn Sie Ihre Implementierung auf Ihre eigenen Objekte anwenden, können Sie ALLE Kollisionen, Namen, Implementierungen oder andere Probleme vermeiden.

Alles, was gesagt wurde, es ist Ihr Wunsch, das zu tun, was Sie wollen, aber ich werde nichts empfehlen, was weithin als reine schlechte Praxis akzeptiert wird. Ich halte mich an meine Empfehlung.

    
BGerrissen 16.11.2010 11:55
quelle

Tags und Links