JavaScript dùng từ khóa var (hoặc const/let hiện đại) để khai báo namespace. Cách phổ biến: Object Literal làm namespace container.
Cú pháp cơ bản
var myNamespace = {
functionOne: function() { ... },
functionTwo: function() { ... }
};
// Gọi
myNamespace.functionOne();
Pattern nâng cao: IIFE Module Pattern
const MyModule = (function() {
// Private variables/functions
let privateVar = 0;
function privateHelper() { ... }
// Public API
return {
publicMethod() { ... },
publicProperty: 42
};
})();
MyModule.publicMethod(); // Access public
// privateVar không truy cập được từ ngoài
ES Modules (Modern Standard - ES2015+)
// math.js (module)
export const PI = 3.14159;
export function add(a, b) { return a + b; }
export default function multiply(a, b) { return a * b; }
// app.js
import multiply, { PI, add } from './math.js';
console.log(add(PI, 1));
Namespace Pattern cho Legacy/Global Scripts
// Tránh global pollution
var MyApp = MyApp || {};
MyApp.Utils = MyApp.Utils || {};
MyApp.Utils.formatDate = function(date) { ... };
MyApp.Models = MyApp.Models || {};
MyApp.Models.User = class { ... };
Best Practice
- ES Modules cho project hiện đại (build tool: Vite, Webpack, Rollup).
- IIFE Module Pattern cho script global không build step.
- Tránh
varglobal - dùngconstnamespace object. - Dùng
Object.freeze()cho namespace constants.