使用IIFE和直接归因来处理这两种模式。
Usingvar
使定义私有,并且您的函数不返回任何内容。用这个:
PROMO.Base = {
Init: function() {
},
WireEvents: function() {
};
};
您正在使用 IIFE(立即执行的函数表达式)包装定义。因此,您的PROMO.Base
对象将被分配(function(){//blabla})();
返回的值。但是你的函数没有return
声明。默认情况下它将返回undefined
.
这是你的PROMO.Base
意愿undefined
,你会得到这个:
Cannot call method 'Init' of undefined
如果你真的想要那个 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();
更新
更好更简单的模式是将函数简单地分配给PROMO.Base
. 请注意,您不应该大写静态函数,而只能大写构造函数。因此,如果某些东西不打算实例化,请不要调用它Init
,它应该是init
. 那就是约定。
var PROMO = {};
PROMO.Base = {};
PROMO.Base.init = function() {
console.log("this works");
};
PROMO.Base.wireEvents = function() {
console.log("this is a static function too");
};