javascript - La negación de instanceof da resultados inesperados
¿Cuál es la diferencia entre estas dos declaraciones? Dan una salida diferente (en la consola de Google Chrome).
function Test() {
if (this instanceof Test) {
} else {
return new Test();
}
}
x = Test();
Prueba {}
function Test() {
if (!this instanceof Test) {
return new Test();
}
}
x = Test();
indefinido
Mente=aturdida
Respuesta #1
El problema es que el ! se evalúa antes que el instanceof, por lo que se está tratando como:
if ((!this) instanceof Test) { ... }
Y, ya sea que !this sea true o false, ninguno de los valores es una instancia de Test, lo que impide que se devuelva new Test().
Agregar un agrupamiento forzará el orden deseado para "no es una instancia:"
if (!(this instanceof Test)) { ... }
