2010-02-19 5 views
20

J'essaye d'appeler une méthode du constructeur de mon constructeur javascript, est-ce possible et si oui, je ne peux pas sembler l'obtenir fonctionnant, aucune perspicacité serait génial! Merci!Appeler une méthode dans un constructeur Javascript et accéder à ses variables

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"); 
} 

EDIT

Je l'ai à travailler avec ce qui est ci-dessus, mais je ne peux pas sembler accéder à la variable « errArray » en fonction CreateErrorList.

+1

pythonists qui atterrissent ici: initialiser un objet en javascript doit être fait avec le mot-clé 'new'. – sauerburger

Répondre

13

Oui, il est possible, lorsque votre fonction constructeur exécute, la valeur this a déjà la propriété [[Prototype]] interne pointant vers l'objet ValidateFields.prototype.

Maintenant, en regardant votre modification, la variable errArray n'est pas disponible dans le champ de la méthode CreateErrorList, car elle est liée uniquement à la portée du constructeur lui-même.

Si vous devez garder cette variable privée et permettre que la méthode CreateErrorList pour y accéder, vous pouvez le définir comme une méthode privilégiée , dans le 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'il est lié à this, ne sera pas partagé et il existera physiquement sur toutes les instances d'objet de ValidateFields.

Une autre option, si vous ne me dérange pas d'avoir la variable errArray, en tant que biens publics de vos instances d'objets, il vous suffit de l'affecter à l'objet this:

//.. 
this.errArray = []; 
//.. 

Plus d'info :

+0

Après quelques recherches, je a découvert que le «errarray» doit avoir le keywork devant celui-ci afin qu'il puisse être disponible pour d'autres méthodes. Je vous remercie de votre aide. – alvincrespo

0

Créez-vous un objet de ValidateFields quelque part?

Édition: Vous devez ajouter this à chaque fois que vous faites référence aux propriétés publiques d'une fonction.

Mise à jour le code ici: http://jsbin.com/afiru/edit

+0

Oui ... Je suis http: // jsbin.com/afiru/2/modifier Bien, je reformule ma question, je l'ai eu enfin de travailler comme il est au-dessus, mais pour une raison que je ne peux pas accéder à la variable « errArray » dans CreateErrorList – alvincrespo

6

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 
} 

Hope this helps quelqu'un qui pourrait avoir une question comme cela à l'avenir.

Questions connexes