Diferencia fundamental entre fn () y new fn () en javascript

12

¿En qué aspectos, llamar a una función con y sin una nueva palabra clave difiere en JavaScript? Quiero decir, ¿en qué se diferencian todas las cosas?

testFn() vs new testFn()

akp
fuente

Respuestas:

13

newcrea un nuevo objeto (vacío) y se pone thisa la misma, a continuación, llama a la función, que actúa como el constructor del objeto (mediante la manipulación this. algo ). Llamar a la misma función sin la newpalabra clave le permitiría actuar sobre lo que thisactualmente significa.

usuario281377
fuente
¿Hay algo más en esto?
akp
@akp no, es realmente así de simple. Excepto lo que no se mencionó es que si la función devuelve explícitamente un tipo de referencia, se devuelve newy el objeto creado se desperdicia.
Esailija
2
El uso newhará que el prototipo del nuevo objeto se configure para hacer referencia al de la primera función a la que se pasa el nuevo objeto. No creo que ese comportamiento pueda lograrse legítimamente por otros medios.
supercat
Tienes razón, me perdí eso.
user281377
1

Estas variantes son sintácticamente diferentes: con la variante "nueva" se supone que la función es un constructor. La variante sin "nuevos" supone, que es no un constructor.

Gangnus
fuente