Warum werden in JavaScript-Konstruktoren unerwünschte Effekte verwendet?

8

Ich verwende in meinem Code normalerweise etwas, das dem Designmuster benutzerdefinierten Objekten sehr ähnlich ist.

Aber JSLint runzelt die Konstrukte wie folgt:

%Vor%

Da das Objekt sofort nach der Erstellung verworfen wird, wird es für nichts verwendet. Wir können JSLint täuschen, dies zu ignorieren, indem wir es einer Variablen zuweisen, aber es ändert nicht, dass JSLint (und ich vermute viele JavaScript-Enthusiasten) das Muster abhält.

Warum werden Nebenwirkungen in einem JavaScript-Konstruktor als schlechte Methode betrachtet?

Für das, was es wert ist, dachte ich, dies sei eine gute Praxis, weil:

  1. Sie haben eine Setup-Funktion, daher sollte es einfacher zu warten sein, wenn z. Sie verwalten eine Liste von MyClass-Instanzen für den späteren Zugriff. (Das Verschieben eines Objekts in ein Array ist ein Nebeneffekt, den Sie nach der Rückkehr des Konstruktors zu "guter Praxis" = schwieriger zu pflegen hätten müssen.)
  2. Es hat seinen eigenen Prototyp, also eine "Klasseneigentümerschaft": Firebug meldet dies als eine Instanz von MyClass anstelle von nur Object. (Dies macht es meiner Meinung nach den anderen Entwurfsmustern überlegen.)
user1994380 04.02.2013, 20:24
quelle

1 Antwort

8

In seinem Buch Clean Code sagt Robert Martin

  

Nebenwirkungen sind Lügen. Deine Funktion verspricht eine Sache zu tun, aber es   tut auch andere verborgene Dinge ... sie sind hinterhältig und schädigende Irrtümer, die oft zu seltsamen zeitlichen Kopplungen und Abhängigkeiten führen.

Was Sie in Ihrem Kommentar zu Arrays beschrieben haben, klingt wie eine "seltsame zeitliche Kopplung".

    
Aaron Kurtzhals 04.02.2013, 21:21
quelle