次のように JavaScript でクラスを作成しました。
var Test = function(){
this.element = null;
this.init = function() {
if(Test.html == "") {
Test.loadHtml(this);
return;
}
this.initElements();
this.someMethodInternalCall();
};
this.initElements = function() {
// append the loaded html to body
// etc...
this.element = $("some-element-contained-in-loaded-html-apended-to-body");
}
this.someMethodInternalCall = function() {
this.element.css({some:style}); // works in this place
}
this.someMethodExternalCall = function() {
this.element.css({some:style}); // dosn't work in this place
// I mean here this.element is null. WHY?
}
};
Test.html = "";
Test.loadHtml = function() {
// load html content by an ajax request (jQuery $.ajax method)
// and put it in Test.html
// then recall the Test.init ethod
return function(caller) {
Test.html = // load html by ajax... etc...
caller.init();
};
}();
function someUsage(){
var t = new Test();
t.init();
t.element.css({some:style}); // error: t.element is null WHY?
t.someMethodExternalCall(); // error: this.element is null WHY?
}
ご覧のとおり、上記のコードで説明しています。初期化後にプロパティを設定すると、内部呼び出しでのみ有効になるのはなぜですか? 値を変更できるプロパティを作成するにはどうすればよいですか?
アップデート:
コードを説明する必要があるようです。問題はすべてelement
プロパティに関するものであり、メソッドや呼び出しではありませTest.html
ん。正しく起動され(テストできます)、ロードされたhtmlを取得し、ロードされたhtmlが追加されます。これは JavaScript パターン (名前は忘れました) であり、正しく動作します。唯一間違っているのは、プロパティの初期化についてです - 。Test.loadHtml
Test.loadHtml
Test.html
body
element