J'essaie d'appeler une méthode à partir du constructeur de mon constructeur javascript, est-ce possible et si c'est le cas, je n'arrive pas à le faire fonctionner, tout aperçu serait génial! Merci!
function ValidateFields(pFormID){
var aForm = document.getElementById(pFormID);
this.errArray = new Array();//error tracker
this.CreateErrorList();
}
/*
* CreateErrorList()
* Creates a list of errors:
* <ul id="form-errors">
* <li>
* You must provide an email.
* </li>
* </ul>
* returns nothing
*/
ValidateFields.prototype.CreateErrorList = function(formstatid){
console.log("Create Error List");
}
Je l'ai fait fonctionner avec ce qui est ci-dessus, mais je n'arrive pas à accéder à la variable 'errArray' dans la fonction CreateErrorList.
Oui, il est possible, lorsque votre fonction constructeur s'exécute, la valeur this
a déjà le [[Prototype]]
propriété interne pointant vers le ValidateFields.prototype
objet.
Maintenant, en examinant votre modification, la variable errArray
n'est pas disponible dans la portée de la méthode CreateErrorList
, car elle n'est liée qu'à la portée du constructeur lui-même.
Si vous devez garder cette variable privée et autoriser uniquement la méthode CreateErrorList
à y accéder, vous pouvez la définir comme un méthode privilégiée , au sein du constructeur:
function ValidateFields(pFormID){
var aForm = document.getElementById(pFormID);
var errArray = [];
this.CreateErrorList = function (formstatid){
// errArray is available here
};
//...
this.CreateErrorList();
}
Notez que la méthode, puisqu'elle est liée à this
, ne sera pas partagée et qu'elle existera physiquement sur toutes les instances d'objet de ValidateFields
.
Une autre option, si cela ne vous dérange pas d'avoir la variable errArray
, en tant que propriété publique de vos instances d'objet, vous avez juste pour l'affecter à l'objet this
:
//..
this.errArray = [];
//..
Plus d'informations:
Solution:
function ValidateFields(pFormID){
console.log("ValidateFields Instantiated");
var aForm = document.getElementById(pFormID);
this.errArray = new Array();//error tracker
this.CreateErrorList(); //calling a constructors method
}
ValidateFields.prototype.CreateErrorList = function(){
console.log("Create Error List");
console.log(this.errArray); //this is how to access the constructors variable
}
J'espère que cela aidera quiconque pourrait avoir une question comme celle-ci à l'avenir.
Créez-vous un objet de ValidateFields
quelque part?
Edit : Vous devez ajouter this
avant de faire référence aux propriétés publiques d'une fonction.
Mise à jour du code ici: http://jsbin.com/afiru/edit