cualquier cosa que hagas, evitar obj .constructor.name o cualquier versión de cadena del constructor. Que funciona muy bien hasta que afear/Minify su código, entonces todos los saltos desde el constructor se cambió el nombre a algo oscuro (por ejemplo: 'n') y su código será todavía hacer esto y nunca coinciden:
// 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') {}
Nota:
// Even if uglified/minified, this will work since SomeObject will
// universally be changed to something like 'n'.
if (obj instanceof SomeObject) {}
(por cierto, necesito más alta reputación para comentar sobre las otras respuestas dignas aquí)
de hecho, se remonta a la primera versión de JavaScript en Netscape 2.0. (Otra razón para no vincularse con ECMA-262 es que es asombrosamente poco claro e ilegible, ¡incluso para estándares de documentos estándar!) – bobince
@bobince: toma algún tiempo acostumbrarse al estilo. :-) –
@bobince: mirando la especificación de ES6 ... bueno ... digamos que ahora estoy ansioso por los días de gloria de la especificación de ES5. :-) –