Búsqueda de sitios web

eval - ¿No son todas las funciones de JavaScript también constructores?


Estoy usando la función eval de una manera extraña, como un constructor.

try {
  var y = new eval()
} catch(error) {
    console.log("caught a " + error.name + ": " + error.message);
}

Lanza un error como,

caught a TypeError: function eval() { [native code] } is not a constructor

Como muestra el mensaje de error, eval es una función pero no un constructor.

La pregunta es, ¿no funcionan todas las funciones de JavaScript también como constructores?

Respuesta #1

No todas las funciones son constructores.

Los constructores son valores de función con una propiedad interna [[Construct]], que no todas las funciones tienen. Esto se hace explícito en 6.1.7.2 Métodos Internos de Objetos y Ranuras Internas de la especificación del lenguaje:

Un objeto función no es necesariamente un constructor y dichos objetos función que no son constructores no tienen un método interno [[Construct]].

Usar new o Reflect.construct para llamar a un no-constructor como constructor lanza un TypeError.