在Javascript构造函数中调用方法并访问其变量

在Javascript构造函数中调用方法并访问其变量,javascript,prototype,constructor,methods,Javascript,Prototype,Constructor,Methods,我试图从我的javascript构造函数的构造函数中调用一个方法,这可能吗?如果可能的话,我似乎无法让它工作,任何洞察都会很棒!谢谢 function ValidateFields(pFormID){ var aForm = document.getElementById(pFormID); this.errArray = new Array();//error tracker this.CreateErrorList(); } /* * CreateErrorList

我试图从我的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");
 }
函数验证字段(pFormID){
var aForm=document.getElementById(pFormID);
this.errArray=new Array();//错误跟踪器
这个.CreateErrorList();
}
/*
*CreateErrorList()
*创建错误列表:
*
    *
  • *你必须提供一封电子邮件。 *
  • *
*一无所获 */ ValidateFields.prototype.CreateErrorList=函数(formstatid){ log(“创建错误列表”); }

我让它可以处理上面的内容,但我似乎无法访问CreateErrorList函数中的“errArray”变量。

您是否在某处创建了
验证字段的对象

编辑:每当引用函数的公共属性时,都需要在
前面加上该

在此更新代码:

是的,当您的构造函数执行时,
值可能已经具有指向
ValidateFields.Prototype
对象的
[[Prototype]]
内部属性

现在,通过查看您的编辑,
errArray
变量在
CreateErrorList
方法的范围内不可用,因为它仅绑定到构造函数本身的范围

如果需要将此变量保持私有,并且只允许
CreateErrorList
方法访问它,则可以在构造函数中将其定义为特权方法:

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

  this.CreateErrorList = function (formstatid){
    // errArray is available here
  };
  //...
  this.CreateErrorList();
}
请注意,由于该方法绑定到
,因此不会被共享,并且它将实际存在于
验证字段
的所有对象实例上

另一个选项是,如果您不介意将
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
      }
      

      希望这能帮助将来有类似问题的人。

      是的……我是,但我应该重新表述我的问题,我最终让它按照上面的方式工作,但由于某些原因,我无法访问CreateErrorList中的“errArray”变量。经过进一步研究,我发现“errArray”前面必须有这个键,以便其他方法可以使用它。感谢您的帮助。来到这里的pythonists:在javascript中初始化对象必须使用
      new
      关键字。