Dans JavaScript, toute fonction juridique peut être utilisée comme constructeur d'objets, qui comprend à la fois des fonctions intégrées dans le système et des fonctions définies par l'utilisateur. Une fois la fonction exécutée en tant que constructeur, cette propriété à l'intérieur se réfère à la fonction elle-même.
D'une manière générale, les constructeurs ne renvoient pas de valeurs, ils initialisent simplement l'objet transmis par ce pointeur et ne renvoient rien. Si une fonction a une valeur de retour, l'objet renvoyé devient la valeur de la nouvelle expression. Du point de vue formel, la seule différence entre une fonction exécutée en tant que constructeur ou une fonction ordinaire, qu'il s'agisse d'utiliser le nouvel opérateur.
La description ci-dessus a en fait un sens plus précis.
Si la valeur de retour d'une fonction est des données d'un type de référence (tableau, objet ou fonction), lorsque cette fonction exécute la construction par le nouveau opérateur en tant que constructeur, le résultat de l'opération sera remplacé par sa valeur de retour. Cette fois, le corps du constructeur est dans cette valeur de, est perdu et est remplacé par l'objet retourné. Par exemple:
La copie de code est la suivante:
Test de fonction ()
{
this.a = 10;
function de retour ()
{
retour 1;
}
}
alert m = new test ();
var n = test ();
alerte (m); // retournez la fermeture après le retour
alerte (n); // retourne la fermeture après le retour
La valeur des résultats en cours d'exécution m et n sont les mêmes, les deux sont les fermetures renvoyées par la fonction de test, et l'objet référencé par ceci et le résultat de l'affectation de ceci.a = 10 sont tous rejetés.
Si la valeur de retour d'une fonction est un type de valeur, alors lorsque la fonction effectue la construction à l'aide du nouvel opérateur en tant que constructeur, sa valeur de retour sera rejetée. Le résultat de la nouvelle expression est toujours l'objet référencé par cela.
La copie de code est la suivante:
Test de fonction ()
{
this.a = 10;
retour 1;
}
alert m = new test ();
var n = test ();
alert (m) // return [objet]
alerte (n) // retour 1.