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

javascript游戏:为什么返回init:init?,javascript,Javascript,我正在学习如何制作javascript游戏的教程,但我仍停留在返回部分。为什么有{},init:init的作用是什么?任何帮助都将不胜感激。谢谢 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()

我正在学习如何制作javascript游戏的教程,但我仍停留在返回部分。为什么有{},init:init的作用是什么?任何帮助都将不胜感激。谢谢

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();
});
var JS_SNAKE={};
JS_SNAKE.game=(函数(){
var-ctx;
var xPosition=0;
var-yPosition=0;
var frameLength=500;//每0.5秒新建一帧
函数init(){
$('body')。追加('');
var$canvas=$(“#jsSnake”);
$canvas.attr('width',100);
$canvas.attr('height',100);
var canvas=$canvas[0];
ctx=canvas.getContext('2d');
gameLoop();
}
函数gameLoop(){
xPosition+=2;
位置+=4;
clearRect(0,0,100,100);//清除画布
ctx.fillStyle='#fe57a1';
fillRect(xPosition,yPosition,30,50);//一个移动的rect
setTimeout(gameLoop,frameLength);//请重新执行所有操作
}
返回{
init:init
};
})();
$(文档).ready(函数(){
JS_SNAKE.game.init();
});
在JavaScript中,
{}
是一个。声明

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


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

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

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

    // snip ...

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

这就是所谓的a-在这里,你用一个匿名函数来封装你的“类”(或者表示它,如果你愿意的话)

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


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

您是如何被卡住的?您希望返回什么,以及正在发生(或未发生)什么?我的意思是,为什么您不能只返回init(),使用大括号有什么意义?我被语法搞糊涂了。
return init()
通过调用
init
函数返回任何值。这与返回包含invocable函数的对象完全不同。