【问题标题】:Calling a method in a Javascript Constructor and Accessing Its Variables在 Javascript 构造函数中调用方法并访问其变量
【发布时间】:2011-01-18 15:32:57
【问题描述】:

我正在尝试从我的 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");
 }

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

【问题讨论】:

  • 在这里登陆的pythonists:在javascript中初始化一个对象必须使用new关键字。

标签: javascript prototype constructor methods


【解决方案1】:

你是在某处创建ValidateFields 的对象吗?

编辑:您需要在引用函数的公共属性时添加this

这里更新了代码: http://jsbin.com/afiru/edit

【讨论】:

  • 是的...我是jsbin.com/afiru/2/edit 虽然,我应该改写我的问题,但我终于让它按照上面的方式工作,但由于某种原因我无法访问“errArray”变量在 CreateErrorList 中
【解决方案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】:

    是的,有可能,当你的构造函数执行时,this 值已经有了指向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();
    }
    

    请注意,由于该方法绑定到this,因此不会共享,它会物理存在于ValidateFields 的所有对象实例上。

    另一种选择,如果您不介意将 errArray 变量作为对象实例的 public 属性,您只需将其分配给 this 对象:

    //..
    this.errArray = [];
    //..
    

    更多信息:

    【讨论】:

    • 经过更多研究后,我发现'errarray'必须在其前面有keywork,以便它可以用于其他方法。感谢您对此提供的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2013-05-08
    • 2020-03-22
    • 2014-12-29
    • 2023-01-27
    • 2019-02-20
    相关资源
    最近更新 更多