javascript游戏:为什么返回init:init?

时间:2011-08-21 05:16:57

标签: javascript

我正在关注如何制作一个javascript游戏的教程,但我仍然坚持返回部分。为什么有{},什么是init:init for?任何帮助,将不胜感激。感谢。

var JS_SNAKE = {};

JS_SNAKE.game = (function () {
  var ctx;
  var xPosition = 0;
  var yPosition = 0;
  var frameLength = 500; //new frame every 0.5 seconds

  function init() {
    $('body').append('<canvas id="jsSnake">');
    var $canvas = $('#jsSnake');
    $canvas.attr('width', 100);
    $canvas.attr('height', 100);
    var canvas = $canvas[0];
    ctx = canvas.getContext('2d');
    gameLoop();
  }

  function gameLoop() {
    xPosition += 2;
    yPosition += 4;
    ctx.clearRect(0, 0, 100, 100); //clear the canvas
    ctx.fillStyle = '#fe57a1';
    ctx.fillRect(xPosition, yPosition, 30, 50); //a moving rect
    setTimeout(gameLoop, frameLength); //do it all again
  }

  return {
    init: init
  };
})();


$(document).ready(function () {
  JS_SNAKE.game.init();
});

2 个答案:

答案 0 :(得分:1)

{}是JavaScript中的object literal。声明

return {
    init: init
}

返回具有一个属性的对象。该属性的键是init,value是名为init的变量具有的值(在本例中为函数)。


如果语法混乱,这是等效的,可能更清楚:

JS_SNAKE.game = (function () {
    // snip...

    function performInitialization() {
        // snip...
    }

    // snip ...

    return {
        init: performInitialization
    };
})();

答案 1 :(得分:0)

这就是所谓的module pattern - 您可以使用匿名函数将“类”(或代表它,如果愿意)包含在其中。

该函数返回可用于访问“类”方法和变量的JS对象,但仅返回公开的(公共)方法 - 例如init

{}是对象文字 - 它在这里用于声明一个空的JS_SNAKE对象 - 它将作为以下“类”声明的命名空间。