HighDots Forums  

Textarea-Elemente erweitern

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Textarea-Elemente erweitern in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Frank Seitz
 
Posts: n/a

Default Textarea-Elemente erweitern - 03-12-2008 , 09:26 PM






Hallo,

ich möchte Textarea-Elemente mit zusätzlicher
Funktionalität ausstatten und das Prototyp-Objekt
der Textarea-Klasse entsprechend um Attribute und
Methoden erweitern.

Geht das portabel? Welchen Klassennamen verwende ich?

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Reply With Quote
  #2  
Old   
Frank Seitz
 
Posts: n/a

Default Re: Textarea-Elemente erweitern - 03-13-2008 , 05:19 AM






Gregor Kofler wrote:
Quote:
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.

Quote:
Man kann konkrete Host
Objekte mit eigenen Eigenschaften anreichern - ob es zuverlässig klappt
sei dahingestellt. IdR gibt es unkritische Alternativen.
Welche denn?

Quote:
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?

Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel


Reply With Quote
  #3  
Old   
J. Strübig
 
Posts: n/a

Default Re: Textarea-Elemente erweitern - 03-13-2008 , 06:37 AM



Frank Seitz schrieb:
Quote:
Gregor Kofler wrote:
Das scheint nicht richtig zu sein, denn

HTMLTextAreaElement.prototype.f = function() { ... };

hat unter einem W3C-DOM-Browser funktioniert.
Exakt. Es geht nicht portabel.

Quote:
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?
In JS gibt es nur Prototypen.

Struppi.


Reply With Quote
  #4  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Textarea-Elemente erweitern - 03-13-2008 , 03:35 PM



Frank Seitz wrote:
Quote:
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.
(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.

Quote:
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.

Quote:
IdR gibt es unkritische Alternativen.

Welche denn?
Siehe oben.

Quote:
Geht das portabel? Welchen Klassennamen verwende ich?
Nachdem JS keine Klassen kennt: Keinen?
Du nimmst mir die Worte aus dem Tastertur *g*

Anzumerken ist jedoch noch, dass JScript .NET sowie Epimetheus als bereits
existierende ECMAScript-Ed.-4-alpha-Implementationen sehr wohl Klassen
kennen, und eifrig weiter an ECMAScript Ed. 4 gearbytet wird, welches
implementiert als JavaScript 2.0 dann auch klassenbasierte Vererbung
bereitstellen soll. (Wann das mal fertig ist und wann/ob es clientseitig
implementiert wird, steht allerdings noch in den Sternen.)

Quote:
In OO-Sprechweise kann man HTMLTextAreaElement m.E. als
Klasse bezeichnen.
Kann man nicht. Erstens ist OOP nicht ausschliesslich klassenbasierte OOP,
wie Du spätestens jetzt merkst (manche merken es nie, siehe Prototype.js).

Zweitens ist der Ausdruck "Klasse" hierfür selbst in klassenbasierter OOP
fhcsal: HTMLTextAreaElement ist lediglich eine Schnittstelle (Interface),
spezifiziert durch W3C DOM Level 2 HTML, welches von
TextArea-Elementobjekten in W3C-DOM-konformen Browsern mehr oder weniger
implementiert wird (vgl. die Schlüsselwörter `interface' und `implements' in
Java).

Als nicht ganz korrekte, aber weithin verständliche Kurzform für die
Instanzen[1] der Implementationen jener Interfaces wird (auch von mir) gern
der Ausdruck "$interface-Objekt" verwendet, hier "HTMLTextAreaElement-Objekt".

[1] Man kann hier IMHO mit Recht von Instanzen sprechen, bedenkt man, dass
die meisten Implementationen in C++ oder Java geschrieben sein dürften.

Quote:
Wie nennt man das sonst in JavaScript?
Genau so. Wie Gregor richtig vorschlug, ist "Host-Objekt" die zweitkürzeste
korrekte Bezeichnung. "DOM-Objekt" ist noch etwas kürzer ;-) und geht vor
allem auch auf die Art der verwendeten Schnittstelle ein.

Im übrigen solltest Du Dir darüber im Klaren sein, dass JavaScript nur eine
von vielen ECMAScript-Implementationen (u.a. in HTML-Benutzerprogrammen) ist
und dass ein DOM nur ein API von vielen ist, welches *auch* mit
ECMAScript-Implementationen benutzt werden kann; es ist spätestens seit
JavaScript 1.4 nicht länger Teil der Sprachimplementation, bei anderen
ECMAScript-Implementationen, wie etwa Microsoft JScript, war es das nie.


HTH

PointedEars
--
Es ist ein ohne Sinn und Verstand ausgeschnittener Teil von invalidem
HTML mit in MSIE funktionierendem JScript (allerdings fehlen hier zum
Funktionieren erforderliche Teile), erzeugt von Micros~1 AffrontPage.
(Dietmar Meier in <aq8afp$7cc0b$1 (AT) ID-3767 (DOT) news.dfncis.de>)


Reply With Quote
  #5  
Old   
Frank Seitz
 
Posts: n/a

Default Re: Textarea-Elemente erweitern - 03-14-2008 , 01:50 AM



J. Strübig wrote:
Quote:
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.
Im Normalfall ist sowas in JavaScript ein Konstruktor. Den meine
ich aber nicht, wenn ich über die "Klasse" als abstrakte
Verallgemeinerung aller Objekte, die ich mittels dieses Konstruktors
erzeugen kann, spreche. Also: Was für ein Wort benutze ich
dafür in JavaScript, wenn nicht "Klasse"?

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel


Reply With Quote
  #6  
Old   
Frank Seitz
 
Posts: n/a

Default Re: Textarea-Elemente erweitern - 03-14-2008 , 01:56 AM



Gregor Kofler wrote:
Quote:
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?
Du wendest das prototype-Attribut, so weit ich sehe,
völlig falsch an, daher beweist dein leider Code nichts.
Ich glaube dir aber, dass da "was" nicht portabel geht, da
das von anderer Seite auch so gesehen wird.

Quote:
(Was ist ein W3C-DOM-Browser?)
Ein Browser, der das W3C DOM implementiert.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel


Reply With Quote
  #7  
Old   
Frank Seitz
 
Posts: n/a

Default Re: Textarea-Elemente erweitern - 03-14-2008 , 01:59 AM



Gregor Kofler wrote:
Quote:
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?
Du wendest das prototype-Attribut, so weit ich sehe,
völlig falsch an, daher beweist dein Code leider nichts.
Ich glaube dir aber, dass da "was" nicht portabel geht, da
das von anderer Seite bestätigt wird.

Quote:
(Was ist ein W3C-DOM-Browser?)
Ein Browser, der das W3C DOM implementiert.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel


Reply With Quote
  #8  
Old   
Frank Seitz
 
Posts: n/a

Default Re: Textarea-Elemente erweitern - 03-14-2008 , 02:50 AM



Thomas 'PointedEars' Lahn wrote:
Quote:
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?)
Weiß ich nicht, ich lese erst seit ein paar Tagen hier.

Quote:
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.
Ein Wrapper-Objekt zu verwenden, ist allerdings nicht gleichwertig,
da die erweiterte Funktionalität erst nachträglich dazugebracht
werden muss. Ein <textarea>...</textarea> z.B., im HTML-Quelltext
definiert, ist erstmal "dumm", dem hätte ich per Vererbung
gerne gleich das nötige Können mitgegeben. Es ist sehr schade,
dass das nicht portabel geht, das wollte ich wissen.

Quote:
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.
Bislang weise ich der Textarea-Instanz die Eigenschaften zu,
statt ein Wrapper-Objekt zu verwenden. Ist das grundsätzlich
problematisch oder nur in exotischen Sonderfällen? Was sind
die Kriterien dafür?

Quote:
Geht das portabel? Welchen Klassennamen verwende ich?

Nachdem JS keine Klassen kennt: Keinen?

Du nimmst mir die Worte aus dem Tastertur *g*
Ihr JavaScriptler habt IMO ein echtes Begriffsproblem
(siehe auch mein Posting <63ulh3F29csd1U5 (AT) mid (DOT) individual.net>).

Deine weiteren Argumente gegen den Begriff "Klasse" kann
ich nachvollziehen, die Bezeichnung "Host-Objekt" oder
"DOM-Objekt" halte ich aber für verfehlt, da sie
den Unterschied zwischen Klasse und Objekt verwischt.
Du selbst sprichst oben von "konkreten Host-Objekten" und meinst
damit Instanzen der Host-Objekte (die sowas wie Klassen oder
Interfaces sein sollen). Das ist zweimal fast dieselbe
Bezeichnung für völlig verschiedenes. Eine brauchbare Terminologie
sieht für mich anders aus.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel


Reply With Quote
  #9  
Old   
Frank Seitz
 
Posts: n/a

Default Re: Textarea-Elemente erweitern - 03-14-2008 , 04:26 AM



Gregor Kofler wrote:
Quote:
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?
Das prototype-Attribut findest du bei einem Konstruktor
(einer Methoden-Instanz) nicht bei jeder Objekt-Instanz.
Du operierst oben mit dem falschen Objekt, also kann
die Vererbung auch nicht klappen.

Quote:
Ein Browser, der das W3C DOM implementiert.

Und wie sieht es mit der Relevanz eines solchen Browsers im echten Leben
aus?
Außerhalb der IE-Welt wird das W3C DOM wohl weitgehend
unterstützt, mit steigender Tendenz. Da ich mit
Javascript nur wenig mache und etwas über die Portabilität
erfahren wollte, hatte ich hier gefragt, erwarte gerade dazu
also bitte keine Auskunft von mir

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel


Reply With Quote
  #10  
Old   
J. Strübig
 
Posts: n/a

Default Re: Textarea-Elemente erweitern - 03-14-2008 , 06:56 AM



Frank Seitz schrieb:
Quote:
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.
Wer sagt das?
Du kannst doch den prototypen sogar erweitern.

Struppi.


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.