Namespace в JavaScript

В JavaScript нет понятия namespace в классическом понимании, как в языках вроде Java или C#, где namespaces — это особая структура для именования классов и модулей. Однако, есть похожие концепции, которые позволяют организовывать код и предотвращать конфликты имен:

Имена объектов (Object Namespaces)


Это простейший способ создать пространство имен. Вы создаете объект, в котором хранятся все ваши функции и переменные:
var MyApp = {};

MyApp.Utils = {
    add: function(a, b) { return a + b; },
    multiply: function(a, b) { return a * b; }
};

console.log(MyApp.Utils.add(2, 3)); // Output: 5

IIFE (Immediately Invoked Function Expression)


Это анонимная функция, которая исполняется сразу после объявления. Внутри нее можно объявлять приватные переменные и функции, доступные только внутри этой функции:
(function () {
    var privateVar = "I'm private";
    
    window.MyApp = {
        publicMethod: function() {
            console.log(privateVar);
        }
    };
})();

MyApp.publicMethod(); // Output: I'm private

ES Modules (ECMAScript Modules)


Начиная с ES6, появилась возможность использовать модули для организации кода. Это современное и чистое решение для изоляции кода и предотвращения конфликтов имен:
// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;

// main.js
import { add, subtract } from './math.js';

console.log(add(2, 3)); // Output: 5
console.log(subtract(5, 2)); // Output: 3

CommonJS Modules (Node.js)


В Node.js часто используется CommonJS-стиль модулей, где экспортируются объекты и функции с помощью  exports  или module.exports:
// math.js
exports.add = function(a, b) { return a + b; };
exports.subtract = function(a, b) { return a - b; };

// main.js
const math = require('./math.js');

console.log(math.add(2, 3)); // Output: 5
console.log(math.subtract(5, 2)); // Output: 3


JavaScript не имеет прямого аналога namespace, как в других языках, но с помощью объектов, модулей и функций можно эффективно изолировать и организовать код, предотвращая конфликты имен и создавая четкую структуру приложения.

Автор:  26.10.2025 08:11:33 am