【发布时间】:2012-12-15 15:50:22
【问题描述】:
我在 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。
【问题讨论】:
-
你的代码是什么?
Test.html = "";每当执行脚本时,Test.html 将等于 NULL... -
问题与
Test.html无关。大约是element。 -
caller不是undefined。请测试代码。直到第二次调用element -
@apsillers +1 是的,在这个问题之后我明白了这一点。但问题是如何处理?我试过
var self = this;和self而不是this工作,但问题存在 -
如果您可以在jsfiddle.net 之类的网站上发布您的代码的工作示例,将会非常有帮助。您当前的代码不起作用(例如,有一些伪代码并且您使用
Text.loadHtml而不是Test.loadHtml),因此很难解决您的问题。
标签: javascript oop class properties