在 Javascript 构造函数中调用方法并访问其变量
Posted
技术标签:
【中文标题】在 Javascript 构造函数中调用方法并访问其变量【英文标题】:Calling a method in a Javascript Constructor and Accessing Its Variables 【发布时间】: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
关键字。
【参考方案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 = [];
//..
更多信息:
Private Members in JavaScript Closures【讨论】:
经过更多研究后,我发现'errarray'必须在其前面有keywork,以便它可以用于其他方法。感谢您对此提供的帮助。以上是关于在 Javascript 构造函数中调用方法并访问其变量的主要内容,如果未能解决你的问题,请参考以下文章