![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Frank Seitz meinte: ich möchte Textarea-Elemente mit zusätzlicher Funktionalität ausstatten und das Prototyp-Objekt der Textarea-Klasse entsprechend um Attribute und Methoden erweitern. Gar nicht. Host Objekte kennen keinen Prototypen. |
|
Man kann konkrete Host Objekte mit eigenen Eigenschaften anreichern - ob es zuverlässig klappt sei dahingestellt. IdR gibt es unkritische Alternativen. |
|
Geht das portabel? Welchen Klassennamen verwende ich? Nachdem JS keine Klassen kennt: Keinen? |
#3
| |||
| |||
|
|
Gregor Kofler wrote: Das scheint nicht richtig zu sein, denn HTMLTextAreaElement.prototype.f = function() { ... }; hat unter einem W3C-DOM-Browser funktioniert. |
|
Geht das portabel? Welchen Klassennamen verwende ich? Nachdem JS keine Klassen kennt: Keinen? In OO-Sprechweise kann man HTMLTextAreaElement m.E. als Klasse bezeichnen. Wie nennt man das sonst in JavaScript? |
#4
| ||||||
| ||||||
|
|
Gregor Kofler wrote: Frank Seitz meinte: ich möchte Textarea-Elemente mit zusätzlicher Funktionalität ausstatten und das Prototyp-Objekt der Textarea-Klasse entsprechend um Attribute und Methoden erweitern. Gar nicht. Host Objekte kennen keinen Prototypen. Das scheint nicht richtig zu sein, denn HTMLTextAreaElement.prototype.f = function() { ... }; hat unter einem W3C-DOM-Browser funktioniert. |
|
Man kann konkrete Host Objekte mit eigenen Eigenschaften anreichern - ob es zuverlässig klappt sei dahingestellt. |
|
IdR gibt es unkritische Alternativen. Welche denn? |
|
Geht das portabel? Welchen Klassennamen verwende ich? Nachdem JS keine Klassen kennt: Keinen? |
|
In OO-Sprechweise kann man HTMLTextAreaElement m.E. als Klasse bezeichnen. |
|
Wie nennt man das sonst in JavaScript? |
#5
| |||
| |||
|
|
Frank Seitz schrieb: In OO-Sprechweise kann man HTMLTextAreaElement m.E. als Klasse bezeichnen. Wie nennt man das sonst in JavaScript? In JS gibt es nur Prototypen. |
#6
| |||
| |||
|
|
Frank Seitz meinte: Gregor Kofler wrote: Gar nicht. Host Objekte kennen keinen Prototypen. Das scheint nicht richtig zu sein, denn HTMLTextAreaElement.prototype.f = function() { ... }; hat unter einem W3C-DOM-Browser funktioniert. var i = document.createElement("input"); i.prototype.foo = "hepp!"; alert(document.createElement("input").foo); Firefox: i.prototype has no properties Line ... Opera: Statement on line ...: Could not convert undefined or null to object Also, wer gewinnt? |
|
(Was ist ein W3C-DOM-Browser?) |
#7
| |||
| |||
|
|
Frank Seitz meinte: Gregor Kofler wrote: Gar nicht. Host Objekte kennen keinen Prototypen. Das scheint nicht richtig zu sein, denn HTMLTextAreaElement.prototype.f = function() { ... }; hat unter einem W3C-DOM-Browser funktioniert. var i = document.createElement("input"); i.prototype.foo = "hepp!"; alert(document.createElement("input").foo); Firefox: i.prototype has no properties Line ... Opera: Statement on line ...: Could not convert undefined or null to object Also, wer gewinnt? |
|
(Was ist ein W3C-DOM-Browser?) |
#8
| ||||
| ||||
|
|
Frank Seitz wrote: Das scheint nicht richtig zu sein, denn HTMLTextAreaElement.prototype.f = function() { ... }; hat unter einem W3C-DOM-Browser funktioniert. (Hatten wir das nicht vor kurzem erst?) |
|
AFAIK implementieren das Gecko-DOM, das Opera (9.x)-DOM, das KHTML-DOM und Apple WebCore die W3C-DOM-Interfaces wie Konstruktoren, d.h. Objekte, die eine prototype-Eigenschaft haben. (Diese lassen jedoch nicht als solche verwenden -- `new HTMLTextAreaElement' geht nicht.) Da dies in MSHTML bisher (Version 7.0) nicht geht und mindestens eine minimale Abwärtskompatibilität hier ein Muss ist, kann man die ansonsten nicht schlechte Idee, DOM-Objekte auf diese Weise zu erweitern, vergessen. Stattdessen muss man ein (natives) benutzerdefiniertes Wrapper-Objekt schreiben, welches das DOM-Objekt per benutzerdefinierter Eigenschaft referenziert (Aggregation). Sinnvoll ist es dann, die entsprechende Zuweisung im Konstruktor des benutzerdefinierten Objekts zu erledigen. |
|
Man kann konkrete Host Objekte mit eigenen Eigenschaften anreichern - ob es zuverlässig klappt sei dahingestellt. Es ist zumindest riskant, da Host-Objekte ihre eigene Implementation von [[Put]] verwenden dürfen. Alles von "nichts passiert" bis zu einem Laufzeitfehler kann Ergebnis einer Zuweisung an eine Eigenschaft eines Host-Objekts sein. |
|
Geht das portabel? Welchen Klassennamen verwende ich? Nachdem JS keine Klassen kennt: Keinen? Du nimmst mir die Worte aus dem Tastertur *g* |
#9
| |||
| |||
|
|
Frank Seitz meinte: Gregor Kofler wrote: var i = document.createElement("input"); i.prototype.foo = "hepp!"; alert(document.createElement("input").foo); [...] Du wendest das prototype-Attribut, so weit ich sehe, völlig falsch an, daher beweist dein Code leider nichts. Wie wende ich denn das prototype-Attribut(sic!) richtig an? |
|
Ein Browser, der das W3C DOM implementiert. Und wie sieht es mit der Relevanz eines solchen Browsers im echten Leben aus? |

#10
| |||
| |||
|
|
J. Strübig wrote: Frank Seitz schrieb: In OO-Sprechweise kann man HTMLTextAreaElement m.E. als Klasse bezeichnen. Wie nennt man das sonst in JavaScript? In JS gibt es nur Prototypen. Das da oben (HTMLTextAreaElement) ist mit Sicherheit kein Prototyp. |
![]() |
| Thread Tools | |
| Display Modes | |
| |