Working fiddle両方のパターンで、IIFEと直接帰属を使用します。
を使用するvar
を使用すると、定義がプライベートになり、関数は何も返しません。
PROMO.Base = {
Init: function() {
},
WireEvents: function() {
};
};
この定義は、IIFE(Immediately Executed Function Expression)でラップしています。したがって、PROMO.Base
オブジェクトには(function(){//blabla})();
が返されます。しかし、あなたの関数はreturn
ステートメントを持っていません。デフォルトではundefined
が返されます。あなたが本当にその生命維持をしたい場合は
Cannot call method 'Init' of undefined
::ところで、あなたのPROMO.Base
がundefined
になり、あなたがこれを取得することです
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
に割り当てるだけです。 Dullyは静的関数を大文字にするべきではなく、コンストラクタのみを大文字にするべきであることに注意してくださいインスタンス化されないものがある場合は、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");
};
でjQueryの
から依存している場合は、実際に私は 'PROMO.Base.Init' –