Cokolwiek robisz, uniknąć OBJ .constructor.name lub dowolna ciągowa wersja konstruktora. Że działa świetnie, dopóki nie zeszpecić/minify swój kod, to wszystkie przerwy ponieważ konstruktor zostanie zmieniona na coś niejasnego (ex: „n”) i kod będzie nadal to robić i nie pasuje:
// Note: when uglified, the constructor may be renamed to 'n' (or whatever),
// which breaks this code since the strings are left alone.
if (obj.constructor.name === 'SomeObject') {}
Uwaga:
// Even if uglified/minified, this will work since SomeObject will
// universally be changed to something like 'n'.
if (obj instanceof SomeObject) {}
(BTW, muszę większą renomę wypowiedzieć się na temat innych godnych odpowiedzi tutaj)
Rzeczywiście, sięga najwcześniejszych JavaScript wersja Netscape 2.0. (Innym powodem, dla którego nie ma połączenia z ECMA-262, jest to, że jest on niewyraźnie niejasny i nieczytelny, nawet według standardów standardów dokumentu!) – bobince
@bobince: To wymaga trochę przyzwyczajenia się do stylu. :-) –
@bobince: Patrząc na specyfikację ES6 ... cóż ... powiedzmy, że teraz aktywnie wracam do dni świetności w specyfikacji ES5. :-) –