如何在JavaScript中创建命名空间

How do I create a namespace in JavaScript?

本文关键字:创建 命名空间 JavaScript      更新时间:2023-09-26

我想使用访问变量

MyNamespace.variable1

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

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

它真的只是一个物体。

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模拟名称空间。

此外,如果您有许多JS文件,每个文件都将一个"名称空间"或Object添加到顶级包中,则可以执行以下操作:

模块.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"的结构。

只需创建一个对象。例如:

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