molily: Sicherstellen, dass Funktion als Konstruktor aufgerufen wird

Beitrag lesen

Wie kann sichergestellt werden, dass eine Funktion als Konstruktor aufgerufen wird (weil sie sonst nämlich keinen Sinn macht)?

»Als Konstruktor aufrufen« ist nichts anderes als dass die Funktion im Kontext eines neuen, leeren Objektes ausgeführt wird. Daher ist es nicht so einfach möglich, das abzufragen. Du kannst höchstens abfragen, ob sie nicht über X() ohne »new« aufgerufen wurde - dann würde this nämlich auf window zeigen (this muss !== window sein). Allerdings gibts viele weitere Möglichkeiten, die Funktion »falsch« aufzurufen, ohne dass this auf window zeigt. Aber die Abfrage, ob window !== this bzw. ungleich dem Objekt ist, an dem du die Konstruktorfunktion vielleicht gruppierst, dürfte schon die häufigste Fehlbenutzung abdecken.

Und wie kann sichergestellt werden, dass der Konstruktor die richtigen Typen in den Argumenten bekommen? Ich habe das bis anhin mit 'throw' gemacht

Das ist schon ganz richtig.

function X(s) {
  if (typeof s != 'number') throw 'Give a number!';

Hier solltest du aber besser throw new Error('Give a number!'); schreiben.

Mathias