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