0

我对 javascript 中的公共变量的范围有疑问。该变量在我的 javascript 类的主函数(函数级别)中声明。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;

})();

提前致谢。

4

2 回答 2

1

从中返回一个新函数,buildGrid该函数将作为 jQuery 的回调传递,并将当前级别传递给包装函数,以便您可以从传递的参数中获取信息。该buildGrid函数对于Level's 的闭包是如此私有,并且只能在其中访问。

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;
})();
于 2013-11-02T13:15:11.660 回答
0

this.layers 只存在于 level 的范围内,它是一个构造函数

尝试以下操作:

var t = new Level.Level()
t.layers
于 2013-11-02T12:50:36.110 回答