![]() | |
![]() |
| | Thread Tools | Display Modes |
#11
| |||
| |||
|
|
Frank Seitz schrieb: 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. |
#12
| |||
| |||
|
|
Der Prototyp ist nur nicht das Objekt HTMLTextAreaElement, sondern das Objekt HTMLTextAreaElement.prototype. |
#13
| |||
| |||
|
|
Frank Seitz schrieb: Der Prototyp ist nur nicht das Objekt HTMLTextAreaElement, sondern das Objekt HTMLTextAreaElement.prototype. Wenn das Objekt einen prototype hat, ist es auch ein Prototyp, oder? |
#14
| |||
| |||
|
|
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? |
#15
| |||
| |||
|
|
J. Strübig wrote: Frank Seitz schrieb: Das Objekt, das das prototype-Attribut hat, ist ein Funktionsobjekt (der Konstruktor), das Objekt, das vom prototype-Attribut referenziert wird, ist das Prototyp-Objekt (der Prototyp). |
#16
| |||
| |||
|
|
On 14 Mrz., 14:17, Frank Seitz <devnull4... (AT) web (DOT) de> wrote: J. Strübig wrote: Frank Seitz schrieb: Das Objekt, das das prototype-Attribut hat, ist ein Funktionsobjekt (der Konstruktor), das Objekt, das vom prototype-Attribut referenziert wird, ist das Prototyp-Objekt (der Prototyp). |
|
Es gibt kein prototype Objekt, du kannst keines erzeugen. Aber ein Prototyp hat eine prototype Eigenschaft. Alle von diesem Prototyp erzeugten Instanzen haben die Eigenschaften, die mit prototype definiert werden. Also ist der Prototyp vergleichbar mit Klassen in anderen Programmiersprachen. Das ist auch der Begriff für Klassen, den du in vielen Beschreibungen über OOP in Javascript findest. |
#17
| ||||||||||||
| ||||||||||||
|
|
Thomas 'PointedEars' Lahn wrote: 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. |
|
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? |
|
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). |
|
.---: nsIDOMNSHTMLTextAreaElement |
|
| | `' ,-----------------------'---. | | interface>> | ,---'-'------------------. nsIDOMHTMLTextAreaElement | | HTMLTextAreaElement: | ---------------------------| | Object | accessKey | |------------------------| cols | | ,--------------------. | disabled |<- - -| | prototype:Object |-----. __proto__ ... | | |--------------------| | | ---------------------------| | | accessKey | | | blur() | | | cols | | | ... | | | disabled | | | `---------,-----------------' | | ... | | | | |--------------------| | | ,. | | blur() | | | |
|
| .----------------'-------------------. | document.createElement("textarea") : | | HTMLTextAreaElement |---' `.____________________________________.' |
|
Das ist zweimal fast dieselbe Bezeichnung für völlig verschiedenes. |
#18
| |||||
| |||||
|
|
struppi wrote: Es gibt kein prototype Objekt, du kannst keines erzeugen. Aber ein Prototyp hat eine prototype Eigenschaft. Alle von diesem Prototyp erzeugten Instanzen haben die Eigenschaften, die mit prototype definiert werden. Also ist der Prototyp vergleichbar mit Klassen in anderen Programmiersprachen. Das ist auch der Begriff für Klassen, den du in vielen Beschreibungen über OOP in Javascript findest. Das ist grober Unfug! |
|
Jeder Konstruktor und damit jedes Function-Objekt hat eine prototype-Eigenschaft, die ein Object-Object referenziert. |
|
Dieses Objekt heisst Prototyp(e)-Objekt oder kurz Prototyp. (Daraus folgt jedoch nicht, dass jedes Objekt mit einer prototype-Eigenschaft auch ein Konstruktor sein muss.) |
|
Prototypen sind nicht mit Klassen vergleichbar. Die Bezeichnung Klasse für einen Konstruktor zu verwenden, ist falsch, |
|
und die entsprechenden "Beschreibungen über OOP in JavaScript" daher fehlerhaft. |
#19
| |||
| |||
|
|
Frank Seitz wrote: Bislang weise ich der Textarea-Instanz die Eigenschaften zu, statt ein Wrapper-Objekt zu verwenden. Ist das grundsätzlich problematisch Ja. oder nur in exotischen Sonderfällen? Nein. Was sind die Kriterien dafür? Siehe oben und ECMAScript Language Specification, Edition 3 Final, Abschnitt 8.6.2. |
#20
| |||
| |||
|
|
Thomas 'PointedEars' Lahn wrote: Frank Seitz wrote: Bislang weise ich der Textarea-Instanz die Eigenschaften zu, statt ein Wrapper-Objekt zu verwenden. Ist das grundsätzlich problematisch Ja. oder nur in exotischen Sonderfällen? Nein. Was sind die Kriterien dafür? Siehe oben und ECMAScript Language Specification, Edition 3 Final, Abschnitt 8.6.2. "8.6.2. Internal Properties and Methods" Habe mir das angesehen. An welcher Stelle steht denn, dass sich Host-Objekte nicht erweitern lassen? Ich habe ja nicht vor, interne Properties und Methoden zu überschreiben, sondern will eigene Properties und Methoden hinzufügen. |
|
Unter IE, Firefox, Safari habe ich im praktischen Test keine Schwierigkeiten feststellen können. |
|
Zur Diskussion, ob der Begriff "Klasse" im JavaScript-Kontext angebracht ist: Ich komme von Perl her, da gibt es auch keine Klassen im traditionellen Sinne und dennoch spricht man dort von "Klassen". Das hat den Vorteil, dass wenigstens jeder weiß was gemeint ist. |
![]() |
| Thread Tools | |
| Display Modes | |
| |