我正在关注如何制作一个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();
});
答案 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
对象 - 它将作为以下“类”声明的命名空间。