Lorsque j'utilise les new
pour instaurer une instance d'une certaine classe, j'ai eu l'instance réelle. Lorsque la fonction constructeur a une valeur de retour, la new
phrase donne également l'exemple réel. Cependant, lorsque le constructeur se retourne, je ne peux pas obtenir l'instance. Au lieu de cela, je reçois le constructeur. Je erre ce qui ne va pas avec ça.
Voici mon fragment de code de test:
function foo() { this.x = 1; return foo; } console.log(new foo()); // prints the defination of foo
Comme nous le considérons, dans la plupart des situations, il ne sert à rien de renvoyer une fonction comme celle-ci. Cependant, pourquoi JS a-t-elle une telle caractéristique? Y a-t-il une considération lors de la conception de JS? Ou est-ce juste un bug de JS?
Si vous renvoyez un objet à partir d'un constructeur, le résultat de la new ...
expression sera l'objet que vous avez renvoyé:
function myWackyConstructor() { return new Date(); } var d = new myWackyConstructor(); console.log(d);
Votre code soulève un sourcil. Il n'a pas de sens pour moi pourquoi vous devriez retourner une classe statique dans votre constructeur.
Je pense que si vous avez renvoyé l'instance actuelle, cela pourrait avoir plus de sens pour vous, mais ce n'est pas nécessaire.
Exemple
function foo() { this.x = 1; return this; } var aFooInstance = new foo(); console.log(aFooInstance); // prints a instance of foo
Cependant, vous voudrez peut-être avoir des variables privées afin que vous puissiez retourner un objet de la sorte, dans cet exemple, vous pouvez également transmettre les données au constructeur.
function foo(x) { var _x = x; this.getX = function(){ return _x;} } var aFooInstance = new foo(1); console.log(aFooInstance.getX()); // prints 1
Je suggère de lire plus sur l' instanciation simple de classe .
Dans JS, lorsque nous déclarons une fonction en tant que classe et lorsque nous créons un objet de cette classe, cette fonction est appelée en premier.
Ne revenez pas de la fonction.
Le constructeur Javascript n'a pas besoin de retour. Cela fonctionnera: –
function foo() { this.x = 1; } var myfoo = new foo(); console.log(myfoo.x);