作爲Javascript中設計模式的新手,我遇到了模塊模式,但我沒有得到命名空間的東西。檢查全局命名空間中的變量是否存在替代名稱
在the namespacing part of Addy Osmani's online book about JS Design Patterns,阿迪解釋檢查變量/命名空間存在的那些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();
對我來說是非常令人困惑,因爲我不明白它是如何阻止我踩到他人的腳趾。
雅這種模式將不保留原有的所有MyApplication – megawac
但你不繼的模式:你做了有條件的分配,然後立即做一個轉讓而不檢查。作業完全是這樣;如果你沒有做任何事情來避免貶低你的價值,你不會做任何事情來避免貶低你的價值。具體問題是什麼? –
@ dave-newton我想具體的問題是如何避免使用myApplication,如果之前已經在使用(我認爲這些選項應該這樣做)?有沒有簡短的方法來給別名或別的什麼? –