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

27
задан Neuron 4 January 2019 в 01:42
поделиться

3 ответа

Да, возможно, когда ваша функция конструктора выполняется, значение 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 = [];
//..

Дополнительная информация:

19
ответ дан 28 November 2019 в 05:45
поделиться

Решение:

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
}

Надеюсь, это поможет всем, у кого могут возникнуть вопросы вот так в будущем.

8
ответ дан 28 November 2019 в 05:45
поделиться

Вы где-то создаете объект ValidateFields?

Edit: Вы должны добавлять this, когда ссылаетесь на публичные свойства функции.

Обновил код здесь: http://jsbin.com/afiru/edit

0
ответ дан 28 November 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: