2011-05-31 21 views
1

我想用如何在JavaScript中創建名稱空間?

MyNamespace.variable1 

是全局可訪問的訪問變量。我相信Drupal會做類似的事情,不是嗎?

+0

[Javascript命名空間聲明]的可能重複(http://stackoverflow.com/questions/881515/javascript-namespace-declaration) – haylem 2011-05-31 23:04:23

回答

3

的Drupal能做什麼是使用下面的代碼:

var Drupal = Drupal || { 'settings': {}, 'behaviors': {}, 'locale': {} }; 

Drupal.attachBehaviors = function (context, settings) { 
    context = context || document; 
    settings = settings || Drupal.settings; 
    // Execute all of them. 
    $.each(Drupal.behaviors, function() { 
    if ($.isFunction(this.attach)) { 
     this.attach(context, settings); 
    } 
    }); 
}; 

Drupal.detachBehaviors = function (context, settings, trigger) { 
    context = context || document; 
    settings = settings || Drupal.settings; 
    trigger = trigger || 'unload'; 
    // Execute all of them. 
    $.each(Drupal.behaviors, function() { 
    if ($.isFunction(this.detach)) { 
     this.detach(context, settings, trigger); 
    } 
    }); 
}; 

// … 

使用類似的代碼,你可以使用JavaScript模擬的命名空間。

2

只需創建一個對象。例如: -

var MyNamespace = {}; 
MyNamespace.variable1 = ... 
+0

我在哪裏可以在全局空間中聲明此...? – Shamoon 2011-05-31 22:58:54

+0

您可以通過將其分配給'window'等任何地方來強制全局。 'window.MyNamespace = {}' – Matt 2011-05-31 22:59:38

+0

只要是完整的。 JavaScript可以在沒有DOM或「窗口」的環境中運行,所以並不總是假設你可以使用它。我只是在沒有'window.'的全局空間中定義它 – Halcyon 2011-05-31 23:09:22

4
var MyNamespace = {}; 
MyNamespace.variable1 = value1; 

這只是一個對象真的。

3

另外,如果你有很多JS文件,每添加一個「命名空間」或對象到頂層包,你可以做這樣的東西:

ModuleA.js

// if Modules is null, create a new object, else use the currently defined instance 
var Modules = Modules || {}; 

Modules.A = {}; 

// sample instance variable 
Modules.A.instanceVar; 

// sample function 
Modules.A.myFunc = function(param1, param2) { 
    // do something 
} 

ModuleB.js

// if Modules is null, create a new object, else use the currently defined instance 
var Modules = Modules || {}; 

Modules.B = {}; 

// sample instance variable 
Modules.B.instanceVar; 

// sample function 
Modules.B.myFunc = function(param1, param2) { 
    // do something 
} 

那麼你當然可以只給他們打電話,你需要他們Modules.A.myFunc()Modules.B.myFunc()Modules.B.instnaceVar = 20;。所以你可以封裝函數和變量。

對於我的代碼,我想有一個根對象,(即),然後添加「類」(對象)它使一切有一個很好的「包像」,「面向對象」的結構給它。

相關問題