J'ai une classe similaire à celle ci-dessous. Comment appeler ma méthode init
lorsque l'objet est créé? Je ne veux pas avoir à créer une instance de mon objet puis appeler initialize comme je le fais 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 de fonction de constructeur doivent commencer par une lettre majuscule pour les distinguer des fonctions ordinaires, par ex. MyClass
au lieu de myClass
.
Soit vous pouvez appeler init
à partir de votre fonction 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
à la fin de la fonction constructeur. Nul besoin d'avoir réellement une fonction init
si elle n'est appelée qu'une fois.
Il y a une manière encore plus douce de faire ceci:
this.init = function(){
// method body
}();
Cela créera à la fois une méthode et l'appellera.
Voir ci-dessous une réponse possible et quelques corrections à apporter à 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();
}
Il suffit d'ajouter
this.init();
à votre fonction myClass.
Les classes JavaScript introduites dans ECMAScript 2015 sont principalement du sucre syntaxique par rapport à l'héritage existant de JavaScript basé sur un prototype. La syntaxe de la classe n'introduit pas un nouveau modèle d'héritage orienté objet dans JavaScript. Les classes JavaScript fournissent une syntaxe beaucoup plus simple et claire pour créer des objets et gérer l'héritage.
Lorsque vous utilisez cette syntaxe, étant donné que seule la méthode constructor()
est exécutée à l’instanciation, vous ne pouvez pas instancier automatiquement un objet. Vous devez toujours ajouter 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')