0

以下のようにオブジェクト リテラルを使用すると、このエラーが発生するのはなぜですか?

<canvas id="game" width="568" height="320"></canvas>


var GAME = {
    settings: {
        canvas: document.getElementById('game'),
        context: this.canvas.getContext('2d'),
        gameWidth: this.context.width,
        gameHeight: this.context.height
    }
};
4

1 に答える 1

1

コードでthisは、 はグローバル コンテキスト、つまり ですwindow。オブジェクト リテラルのプロパティでオブジェクト自体を参照することはできません。

解決策 :

var GAME = {
    settings: {
        canvas: document.getElementById('game');
    }
};
GAME.settings.context = GAME.settings.canvas.getContext('2d');
GAME.settings.gameWidth = GAME.settings.context.width;
GAME.settings.gameHeight = GAME.settings.context.height;

よりクリーンなコードにIIFEを使用できます。

var GAME = (function(){
   var s = {};
   s.canvas = document.getElementById('game');
   s.context = s.canvas.getContext('2d');
   s.gameWidth = s.context.width;
   s.gameHeight = s.context.height;
   return { settings : s}
})();
于 2013-09-08T17:42:29.837 に答える