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.