Подтвердить что ты не робот

Вызов метода в конструкторе 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.

4b9b3361

Ответ 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