Javascript のデザイン パターンの初心者として、モジュール パターンに出くわしましたが、名前空間で何かが得られません。
Addy Osmani の JS Design Patterns に関するオンライン ブックの名前空間の部分で、Addyは変数/名前空間の存在を確認する 5 つの方法を説明しています。
// This doesn't check for existence of "myApplication" in
// the global namespace. Bad practice as we can easily
// clobber an existing variable/namespace with the same name
var myApplication = {};
// The following options *do* check for variable/namespace existence.
// If already defined, we use that instance, otherwise we assign a new
// object literal to myApplication.
//
// Option 1: var myApplication = myApplication || {};
// Option 2 if( !MyApplication ){ MyApplication = {} };
// Option 3: window.myApplication || ( window.myApplication = {} );
// Option 4: var myApplication = $.fn.myApplication = function() {};
// Option 5: var myApplication = myApplication === undefined ? {} : myApplication;
私が本当に得られないのは、ネーミングの問題をどのように解決するかです。
私のコードが myApplication を使用しようとする前に myApplication が設定されているとしましょう。たとえば、オプション 1 (または実際にはすべてのオプション) を使用すると、myApplication が既に使用されている場合は何も変更されないように見えますが、myApplication の以前の値が上書きされるだけです。
// Higher in some script, where I don't know about it
var myApplication = 'whatever string or object used by the script';
// A bit of code later, where I come with my little Module Pattern
var myApplication = myApplication || {}; // Using Option 1
myApplication = (function($) {
var myAppVariable = 'blabla';
var myAppFunction = function() {
// Doing a few things here
};
return myAppFunction;
}) (jQuery);
// Using the module
myApplication.myAppFunction();
私には、それが他の人の足を踏むのをどのように妨げているのかがわからないので、非常に混乱しています.