2016-08-04 25 views
8

Die ES5-Sprachspezifikation clearly states, die Error(foo) tut das gleiche wie new Error(foo).Wann ist `new Error()` besser als `Error()`?

Aber ich bemerke, dass in der Wildnis, die längere new Error(foo) Form ist viel häufiger.

Gibt es einen Grund dafür?

Gibt es eine Situation, in der die Verwendung von new Error(foo) der Verwendung von Error(foo) vorzuziehen ist?

+2

Es könnte statische Code-Prüfungen geben, die Großbuchstaben-Funktionsnamen-Klassen berücksichtigen und prüfen, ob sie mit neuen aufgerufen werden müssen. –

+1

Ein anderer Grund ist, dass die Leute es nicht wissen oder wissen, aber es bevorzugen, weil es das ist, was sie gewohnt sind, dass das Verwenden von neuen das Standardmuster war. –

Antwort

10

Gibt es einen Grund dafür?

Es ist einfach die Gewohnheit, Konstruktoren immer mit new aufzurufen. Konsistenzregeln!

Es ist eine gute Übung, auch wenn sie ohne new arbeiten, und von mehreren Styleguides und verwandten Werkzeugen empfohlen. Btw, seit ES6 Error is subclassible, und seine Unterklassen benötigen new.

+0

Es sieht so aus, als ob Unterklassen das gleiche Verhalten implementieren könnten, wenn sie es wollten, aber dafür müssen sie nicht. Dies deutet darauf hin, dass es eine gute Vorgehensweise wäre, benutzerdefinierte Fehlerobjekte unter Verwendung von "new" zu konstruieren, und daher könnte es wünschenswert sein, auch Standardfehlerobjekte unter Verwendung von "new" aus Gründen der Konsistenz zu konstruieren. – joeytwiddle

+2

@joeytwiddle Eigentlich "Klasse X erweitert Fehler" [kann nicht das gleiche Verhalten implementieren] (http://stackoverflow.com/a/31789308/1048572), es wird immer ausgelöst, wenn ein Konstruktor ohne 'new' aufgerufen wird. – Bergi