Working fiddle con entrambi i modelli, utilizzando IIFE e attribuzione diretta.
L'utilizzo di var
rende la definizione privata e la funzione non restituisce nulla. Utilizzare questa:
PROMO.Base = {
Init: function() {
},
WireEvents: function() {
};
};
Stai avvolgendo la definizione di un IIFE (eseguito immediatamente espressione di funzione). Pertanto al tuo oggetto PROMO.Base
verrà assegnato il valore dei ritorni (function(){//blabla})();
. Ma la tua funzione non ha un'istruzione return
. Di default restituirà undefined
.
che è il modo il vostro PROMO.Base
sarà undefined
e si ottiene questo:
Cannot call method 'Init' of undefined
Se davvero si vuole che IIFE:
var PROMO = PROMO || {};
// NEVER use _self = this inside static functions, it's very dangerous.
// Can also be very misleading, since the this object doesn't point to the same reference.
// It can be easily changed with Function.prototype.call and Function.prototype.apply
PROMO.Base = (function() {
_PROMO = {
Init : function() {
document.body.innerHTML += "itworks";
},
WireEvents : function() {
//wire up events
}
}
return _PROMO;
}());
PROMO.Base.Init();
Aggiornamento
Il modello migliore e più facile è semplicemente assegnare le funzioni a PROMO.Base
. Dully nota che non si dovrebbero capitalizzare le funzioni statiche, ma solo i costruttori. Quindi, se qualcosa non deve essere istanziato, non chiamarlo Init
, dovrebbe essere init
. Questa è la convenzione.
var PROMO = {};
PROMO.Base = {};
PROMO.Base.init = function() {
console.log("this works");
};
PROMO.Base.wireEvents = function() {
console.log("this is a static function too");
};
È mai effettivamente assegnata la funzione memorizzata in 'Init' a' PROMO.Base.Init' –