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

jQuery のコールバックとして渡される新しい関数を返し、buildGrid渡された引数から情報を取得できるように、ラップされた関数に現在のレベルを渡します。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;
})();
于 2013-11-02T13:15:11.660 に答える