Я пытаюсь назвать метод от конструктора моего конструктора JavaScript, это возможное и если так, я, может казаться, не получаю его работа, любое понимание было бы большим!Спасибо!
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");
}
Я заставил это работать с тем, что выше, но я, может казаться, не получаю доступ к 'errArray' переменной в функции CreateErrorList.
Да, возможно, когда ваша функция конструктора выполняется, значение this
уже имеет внутреннее свойство [[Prototype]]
, указывающее на ValidateFields.prototype
объект.
Теперь, при просмотре вашего редактирования, переменная errArray
недоступна в области действия метода CreateErrorList
, поскольку она привязана только к области действия самого конструктора. .
Если вам нужно сохранить эту переменную частной и разрешить доступ к ней только методу CreateErrorList
, вы можете определить ее как привилегированный метод в пределах constructor:
function ValidateFields(pFormID){
var aForm = document.getElementById(pFormID);
var errArray = [];
this.CreateErrorList = function (formstatid){
// errArray is available here
};
//...
this.CreateErrorList();
}
Обратите внимание, что метод, поскольку он привязан к this
, не будет общим и будет физически существовать во всех экземплярах объекта ValidateFields
.
Другой вариант: если вы не против использовать переменную errArray
в качестве общедоступного свойства экземпляров ваших объектов, вам просто нужно назначить ее для этот
объект:
//..
this.errArray = [];
//..
Дополнительная информация:
Решение:
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
}
Надеюсь, это поможет всем, у кого могут возникнуть вопросы вот так в будущем.
Вы где-то создаете объект ValidateFields
?
Edit: Вы должны добавлять this
, когда ссылаетесь на публичные свойства функции.
Обновил код здесь: http://jsbin.com/afiru/edit