私は私の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」変数にアクセスできないようです。
はい、可能です。コンストラクター関数が実行されるとき、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
にバインドされているため、sharedにはならず、ValidateFields
のすべてのオブジェクトインスタンスに物理的に存在することに注意してください。
別のオプションとして、errArray
変数をオブジェクトインスタンスのpublicプロパティとして使用することを気にしない場合は、それをthis
オブジェクト:
//..
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
}
これが将来このような質問をするかもしれない人を助けることを願っています。
ValidateFields
のオブジェクトをどこかに作成していますか?
Edit:関数のパブリックプロパティを参照するときは常にthis
を前に付ける必要があります。
ここでコードを更新しました: http://jsbin.com/afiru/edit