我在javascript中遇到了公共变量范围的问题。该变量在我的javascript类的main函数(函数级别)中声明。 loadXML函数是从类外部调用的,但是知道this.layers变量。当我的xml被加载并重定向到另一个函数时,this.layers变量突然未定义。任何有此类问题经验的人。
var Level = (function()
{
function Level()
{
this.layers = 3;
}
Level.prototype.loadXML = function()
{
console.log(this.layers); //variable is defined!
$.get("xml/level_" + this.currentLevel + ".xml", Level.buildGrid);
};
Level.buildGrid = function(xml)
{
console.log(this.layers); //variable is undefined!
};
return Level;
})();
提前致谢。
答案 0 :(得分:1)
从buildGrid
返回一个新函数,该函数将作为jQuery的回调传递,并传递给当前级别的包装函数,以便您可以从传递的参数中获取信息。 buildGrid
函数对Level
的闭包是如此私有,只能在它内部访问。
var Level = (function () {
var buildGrid = function (level) {
return function(xml) {
console.log(xml);
console.log(level.layers);
};
};
function Level() {
this.layers = 3;
}
Level.prototype.loadXML = function () {
console.log(this.layers); //variable is defined!
$.get("xml/level_" + this.currentLevel + ".xml", buildGrid(this));
};
return Level;
})();
答案 1 :(得分:0)
this.layers仅存在于 constructur 的级别范围内。
尝试以下方法:
var t = new Level.Level()
t.layers