Classe JavaScript – Méthode d'appel lorsque l'objet est initialisé

J'ai une classe semblable à celle ci-dessous. Comment puis-je appeler ma méthode d' init lorsque l'objet est créé? Je ne veux pas devoir créer une instance de mon objet puis appeler l'initialisation comme je l'ai fait ci-dessous.

 var myObj = new myClass(2, true); myObj.init(); function myClass(v1, v2) { // public vars this.var1 = v1; // private vars var2 = v2; // pub methods this.init = function() { // do some stuff }; // private methods someMethod = function() { // do some private stuff }; } 

NB. Les noms des fonctions du constructeur devraient commencer par une lettre majuscule pour les distinguer des fonctions ordinaires, par exemple MyClass au lieu de myClass .

Soit vous pouvez appeler init partir de votre fonction de constructeur:

 var myObj = new MyClass(2, true); function MyClass(v1, v2) { // ... // pub methods this.init = function() { // do some stuff }; // ... this.init(); // <------------ added this } 

Ou plus simplement, vous pouvez simplement copier le corps de la fonction init jusqu'à la fin de la fonction constructeur. Il n'est pas nécessaire d'avoir une fonction d' init si elle n'est appelée qu'une seule fois.

Il existe encore plus de moyens pour faire ceci:

 this.init = function(){ // method body }(); 

Cela créera la méthode et l'appellera.

Voir ci-dessous une réponse possible, et quelques corrections à votre code.

 function myClass(v1, v2) { // public vars this.var1 = v1; // private vars // use var to actually make this private var var2 = v2; // pub methods this.init = function() { // do some stuff }; // private methods // this will be private as though it had been declared with var function someMethod() { // do some private stuff }; //call init this.init(); } 

Ajoutez simplement

 this.init(); 

À votre fonction myClass.

Les classes JavaScript introduites dans ECMAScript 2015 sont principalement du sucre syntaxique par rapport aux héritages existants de prototypes de JavaScript. La syntaxe de la classe n'introduit pas un nouveau modèle d'héritage orienté objet vers JavaScript. Les classes JavaScript fournissent une syntaxe beaucoup plus simple et plus claire pour créer des objets et gérer les héritages.

– documents Web MDN

Lorsque vous utilisez cette syntaxe, car seule la méthode constructor() est exécutée lors de l'instanciation, vous ne pouvez pas instancier automatiquement un objet. Vous devez toujours ajouter un user = new MyUser()

 var user; class MyUser { constructor(var1, var2) { this.var1 = var1; this.var2 = var2; } static staticMethod() { // accessed directly with the class name `MyUser` } instanceMethod() { // accessed with object instance return true } } user = new MyUser('hey','there')