Je cherchais un constructeur ou une fonction init pour la situation suivante:
var Abc = function(aProperty,bProperty){
this.aProperty = aProperty;
this.bProperty = bProperty;
};
Abc.prototype.init = function(){
// Perform some operation
};
//Creating a new Abc object using Constructor.
var currentAbc = new Abc(obj,obj);
//currently I write this statement:
currentAbc.init();
Existe-t-il un moyen d'appeler la fonction init lorsque le nouvel objet est initialisé?
Vous pouvez simplement appeler init()
à partir de la fonction constructeur
var Abc = function(aProperty,bProperty){
this.aProperty = aProperty;
this.bProperty = bProperty;
this.init();
};
Voici un violon démontrant: http://jsfiddle.net/CHvFk/
Peut-être quelque chose comme ça?
var Abc = function(aProperty,bProperty){
this.aProperty = aProperty;
this.bProperty = bProperty;
this.init = function(){
// Do things here.
}
this.init();
};
var currentAbc = new Abc(obj,obj);
si votre méthode init doit rester privée:
var Abc = function(aProperty,bProperty){
function privateInit(){ console.log(this.aProperty);}
this.aProperty = aProperty;
this.bProperty = bProperty;
privateInit.apply(this);
};
j'aime plus ça
Et ça?
var Abc = function(aProperty,bProperty){
this.aProperty = aProperty;
this.bProperty = bProperty;
//init
(function () {
// Perform some operation
}.call(this));
};
var currentAbc = new Abc(obj,obj);
Le constructeur devrait être l'endroit où initialiser votre instance. Si la méthode init n'est pas censée être réexécutée, conservez le code associé à l'initialisation dans le constructeur et scindez plutôt le code en plusieurs sous-méthodes spécifiques (de préférence privées) s'il devient trop gros et compliqué.
Cela dit, si vous devez avoir la possibilité de réexécuter ou d’appeler la méthode init de manière ' asynchrone ', la solution que je trouve la plus flexible est de renvoyer this
à partir de votre méthode init
. De cette façon, vous pouvez créer une instance, l'assigner à une variable et appeler votre méthode init encore distincte sur une ligne.
var Abc = function(aProperty){
this.aProperty = aProperty;
};
Abc.prototype.init = function(){
// init stuff
return this;
};
// either as oneliner
var abc = new Abc().init();
// or
var abc = new Abc();
setTimeout(function(){abc.init()},500);