如何在JavaScript中创建命名空间?

时间:2011-05-31 22:56:39

标签: javascript namespaces

我想使用

访问变量
MyNamespace.variable1

可全球访问。我相信Drupal做了类似的事情,不是吗?

4 个答案:

答案 0 :(得分:4)

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

这只是一个对象。

答案 1 :(得分: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;拨打电话。所以你可以封装函数和变量。

对于我的代码,我喜欢有一个根对象,(即)然后向它添加“类”(对象),这样一切都有一个很好的“类似包”,“OOP”结构。

答案 2 :(得分: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模拟名称空间。

答案 3 :(得分:2)

只需创建一个对象。 E.g:

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