Niedawno miałem nawyk wywoływania takich rzeczy jak RegExp, String, Number, Object, TypeError, itp. Bez "nowego".Czy występują problemy z wywoływaniem konstruktorów JavaScript jako funkcji (bez nowych?)
np
throw (TypeError("Error"));
var regex = RegExp('^word$');
wiem, że to jest złe dla przypadków, gdy potrzebne jest „ten” kontekst, ponieważ bez „nowy”, „ta” sieje spustoszenie w zakresie globalnym chyba owinąć kod w "użyj ścisłego", w którym to przypadku pojawia się błąd, że próbujesz mutować "niezdefiniowany". (Nie jestem pewien, czy działa to w bardzo starych przeglądarkach).
np
var constructor = function() {
// 'use strict'; /* uncomment this line to avoid the behavior and be warned */
this.state = 'working as intended';
};
var foo = constructor();
console.log(foo.state); // undefined
console.log(window.state); // we just polluted our global scope.
natomiast
var constructor = function() {
this.state = 'working as intended';
};
var foo = new constructor;
console.log(foo.state); // "working as intended"
console.log(window.state); // we are clean.
Ale w przypadkach takich jak te powyżej, to jest w porządku, aby to zrobić, czy istnieją problemy mam ustawienie się do góry na razie mam się dostać do nawyk robienia tego?
Dziękuję z wyprzedzeniem.
Więc mówisz o takich rzeczach jak RegExp i TypeError i String (w kontekście konkatenacji), to jest idealnie w porządku? – Dmitry
@Dmitry To jest w porządku dla [Konstruktora RegExp] (http://www.ecma-international.org/ecma-262/6.0/#sec-regexp-constructor) i [Konstruktora błędu] (http: // www. ecma-international.org/ecma-262/6.0/#sec-error-constructor). Nie dla String, Boolean, Number. – Oriol
, więc robiąc rzeczy takie jak 'console.log (String (1392))' zamiast 'console.log (1392.toString())' lub 'console.log ('' + 1392)' lub po prostu 'console.log (1392) 'nie jest w porządku? – Dmitry