我在 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
不是Test.loadHtml
方法或调用它。Test.loadHtml
立即触发(您可以对其进行测试)并Test.html
获取加载的html,并将加载的html附加到body
等等。这是一个 JavaScript 模式(我忘了它的名字是什么)并且可以正常工作。唯一错误的是关于属性初始化 - element
.