2016-08-04 27 views
8

Specyfikacja języka ES5 clearly states, którą Error(foo) robi to samo, co new Error(foo).Kiedy jest `nowy błąd()` lepiej niż `Błąd()`?

Ale zauważyłem, że na wolności, dłuższy formularz new Error(foo) jest znacznie bardziej powszechne.

Czy jest jakiś powód?

Czy jest jakaś sytuacja, w której korzystanie z new Error(foo) jest lepsze niż korzystanie z Error(foo)?

+2

Mogą wystąpić statyczne sprawdzenia kodu, biorąc pod uwagę wielkie nazwy funkcji i sprawdzające, czy muszą być wywołane z nowymi. –

+1

Innym powodem są ludzie, którzy nie znają lub nie znają, ale wolą, ponieważ są do tego przyzwyczajeni, biorąc pod uwagę, że używanie nowego jest standardowym wzorcem. –

Odpowiedz

10

Czy jest jakiś powód tego?

To zwyczaj nawiązywania zawsze połączeń z konstruktorami pod numerem new. Zasady spójności!

Jest to dobra praktyka, nawet gdy pracują bez new i zalecane przez kilka przewodników stylu i związanych z nimi narzędzi. Btw, ponieważ ES6 Error is subclassible i jego podklasy będą wymagać new.

+0

Wygląda na to, że podklasy mogłyby zaimplementować to samo zachowanie, gdyby chciały, ale nie ma dla nich takiego wymogu. Sugeruje to, że dobrą praktyką byłoby konstruowanie niestandardowych obiektów błędów za pomocą 'new', a zatem pożądane może być również skonstruowanie standardowych obiektów błędów za pomocą' new', aby uzyskać spójność. – joeytwiddle

+2

@joeytwiddle W rzeczywistości 'klasa X rozszerza błąd' [nie może zaimplementować tego samego zachowania] (http://stackoverflow.com/a/31789308/1048572), zawsze wyrzuca, gdy konstruktor jest wywoływany bez' nowego'. – Bergi