2010-02-19 16 views
20

Estoy tratando de llamar a un método desde el constructor de mi constructor de JavaScript, si esto es posible y, si es así, parece que no puedo hacerlo funcionar, cualquier idea sería ¡estupendo! ¡Gracias!Llamar a un método en un Constructor de Javascript y acceder a sus 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"); 
} 

EDITAR

que tengo que trabajar con lo que está arriba, pero me parece que no puede acceder a la variable 'errArray' en función de CreateErrorList.

+1

pythonists que aterrizan aquí: la inicialización de un objeto en javascript debe hacerse con la palabra clave 'new'. – sauerburger

Respuesta

13

Sí, es posible, cuando su función se ejecuta el constructor, el valor this ya tiene la propiedad interna [[Prototype]] que apunta al objeto ValidateFields.prototype.

Ahora, al observar su edición, la variable errArray no está disponible en el alcance del método CreateErrorList, ya que está limitada solo al alcance del propio constructor.

Si es necesario mantener esta variable privada y sólo permiten el método CreateErrorList para acceder a ella, se puede definir como un método privilegiado, dentro del constructor:

function ValidateFields(pFormID){ 
    var aForm = document.getElementById(pFormID); 
    var errArray = []; 

    this.CreateErrorList = function (formstatid){ 
    // errArray is available here 
    }; 
    //... 
    this.CreateErrorList(); 
} 

Tenga en cuenta que el método , ya que está limitado a this, no será compartido y existirá físicamente en todas las instancias de objetos de ValidateFields.

Otra opción, si no te importa tener la variable errArray, como pública propiedad de sus instancias de objetos, sólo hay que asignarlo al objeto this:

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

Más información :

+0

Después de investigar un poco más I descubrió que el 'errarray' debe tener la clave de este frente para que pueda estar disponible para otros métodos. Agradezco su ayuda con esto. – alvincrespo

0

¿Está creando un objeto de ValidateFields en alguna parte?

Editar: Necesita anteponer this siempre que se refiera a las propiedades públicas de una función.

Actualizado el código aquí: http://jsbin.com/afiru/edit

+0

Sí ... soy http: // jsbin.com/afiru/2/edit Aunque, debería reformular mi pregunta, finalmente conseguí que funcionara como está arriba, pero por alguna razón no puedo acceder a la variable 'errArray' en CreateErrorList – alvincrespo

6

Solución:

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 
} 

Espero que esto ayude a cualquiera que pueda tener una pregunta como esta en el futuro.

Cuestiones relacionadas