Christian S.: Zwei Fragen zu intrinsischen Objekten

Beitrag lesen

Hallo,

JavaScript kennt zwei Objekte (globales Objekt und Math-Objekt), die unmittelbar zur Verfügung stehen, also nicht mittels Konstruktor erzeugt werden müssen.

Frage 1: Sind das die beiden einzigen Objekte, die nicht explizit erzeugt werden müssen?

Man kann ja z.B. auch schreiben Date.UTC(). In diesem Falle muss auch kein Date Objekt erstellt werden.

Ich weiß nicht was intrinsisch bedeutet, aber wie Der Martin schon schön beschrieben hat, scheint es eher willkür zu sein.

Ich bezeichne solche Objekte als Objekte mit statischen Methoden. Bzw. es gibt ja auch Objekte wie eben Date oder auch String (.fromCharCode), die sowohl statische als auch nicht-statische Methoden aufweisen. Daher würde ich einfach sagen, die Methode ist statisch oder eben nicht. Das ist eigentlich auch die terminologie bei richtigen OO-Sprachen.

Oft wird auch von eine Instanz- oder einer Klassen-Methode gesprochen. Bei der Instanz-Methode ist die Methode eben an der Instanz dran, und sonst braucht man eben keine Instanz zu erzeugen, um die Methode aufzurufen.
Nun gibt es natürlich nur keine richtigen Klassen in JavaScript...

Frage 2: Würdet ihr dieser Definition zustimmen oder den Begriff "intrinsisch" weiter fassen, in dem Sinne, dass er alle Objekttypen (Array, Date, ...), die JavaScript kennt, umfasst?

Vielleicht eher letzteres. Objekte und Methoden, die die Sprache von Haus aus mitbringt, trifft es vielleicht.

Zu der Frage, weshalb man die Math Funktionen nicht global gemacht hat:

Das würde doch nur unübersichtlicher werden, bzw. es ist doch der Sinn einer objektorientierten Sprache, die Methoden strukturiert in Namespaces und Klassen unterzubringen. Und früher oder später gäbs dann Namenskonflikte. Man könnte dann z.B. keine Variable mehr E nennen und gleichzeitig auf die eulersche Zahl zugreifen...
Mag blöd erscheinen, aber ich finde sowas gehört zum guten Design, also die Strukturierung zusammengehörender Funktionen in ein Oberobjekt.

Gruß
Christian