Я строю игру и пытаюсь выяснить, как работает игровой движок melonJS
. Я нахожусь в точке, где мне нужно создать собственную версию своего объекта CanvasRender, поэтому пыталась понять, что они сделали.Обтекание пространства имен с помощью функции самоисполнения
Зачем нужно обернуть рендеринг холста анонимной функцией самозапускания? Не могу ли я просто создать функцию как таковую?
me.CanvasRenderer = me.CanvasRenderer || {};
me.CanvasRenderer = {
init: function() {
//...
Или даже в пространстве имен:
var CanvasStuff = {
CanvasRenderer : function() {
}
};
CanvasStuff.CanvasRenderer();
Я не понимаю, как они выложили этот код и цель. Как и когда вызывается (function() {
?
Вот отрывок из их коды: (link to full code)
(function() {
// The canvas renderer object
me.CanvasRenderer = (function() {
var api = {},
var canvas = null,
//...
api.init = function() {
//...
};
return api;
//...
})();
})();
читать дальше [singleton pattern] (http://www.dofactory.com/javascript/singleton-design-pattern) –
Я думаю, что OP знает, что такое одноэлементный шаблон ... Там действительно нет причин для дополнительная упаковка. Возможно, они ожидали включения некоторых переменных в первую функцию self invoking. Таким образом, определение SEF поможет вам, поэтому вы не будете пропускать любые переменные. Его возможные другие объекты используют этот же шаблон, и разработчик не хотел нарушать шаблон – cgatian
@cgatian, который является одноэлементным шаблоном, а ОП спрашивает, почему они это сделают, поэтому я склонен не соглашаться с вашим предположением об знаниях OP! –