En JavaScript, cualquier función legal puede usarse como un constructor de objetos, que incluye tanto las funciones incorporadas en el sistema como las funciones definidas por el usuario. Una vez que la función se ejecuta como un constructor, esta propiedad dentro se referirá a la función misma.
En términos generales, los constructores no devuelven valores, simplemente inicializan el objeto aprobado por este puntero y no devuelven nada. Si una función tiene un valor de retorno, el objeto devuelto se convierte en el valor de la nueva expresión. Desde un punto de vista formal, la única diferencia entre una función que se ejecuta como un constructor o una función ordinaria, ya sea para usar el nuevo operador.
La descripción anterior en realidad tiene un significado más preciso.
Si el valor de retorno de una función son los datos de un tipo de referencia (matriz, objeto o función), cuando esta función ejecuta la construcción con el nuevo operador como constructor, el resultado de la operación será reemplazado por su valor de retorno. Esta vez, el cuerpo del constructor está en el valor de este valor de, se pierde y se reemplaza por el objeto devuelto. Por ejemplo:
La copia del código es la siguiente:
Test de funciones ()
{
esto.a = 10;
Función de retorno ()
{
regresar 1;
}
}
alerta m = nuevo test ();
var n = test ();
alerta (m); // Devuelve el cierre después de la devolución
alerta (n); // Devuelve el cierre después de la devolución
El valor del resultado de ejecución myn son los mismos, ambos son los cierres devueltos por la función de prueba, y el objeto a los que se hace referencia a esto y el resultado de la asignación de esto. A = 10 se descartan.
Si el valor de retorno de una función es un tipo de valor, entonces cuando la función realiza la construcción utilizando el nuevo operador como constructor, su valor de retorno se descartará. El resultado de la nueva expresión sigue siendo el objeto mencionado por esto.
La copia del código es la siguiente:
Test de funciones ()
{
esto.a = 10;
regresar 1;
}
alerta m = nuevo test ();
var n = test ();
alerta (m) // return [objeto]
alerta (n) // devolver 1.