OOP JavaScript - 公共变量undefined

时间:2013-11-02 12:46:42

标签: javascript oop

我在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;

})();

提前致谢。

2 个答案:

答案 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