Пример хренового кода на подумать class URLParamHandler { constructor() { this.preHandlers = []; this.mainHandlers = []; this.postHandlers = []; } // Добавление обработчиков addPre(handler) { this.preHandlers.push(handler); } addMain(handler) { this.mainHandlers.push(handler); } addPost(handler) { this.postHandlers.push(handler); } // Выполнить все стадии run() { const params = new URLSearchParams(window.location.search); // Pre stage for (const handler of this.preHandlers) { handler(params); } // Main stage for (const handler of this.mainHandlers) { handler(params); } // Post stage for (const handler of this.postHandlers) { handler(params); } } } const urlHandler = new URLParamHandler(); // Pre: декодирование и валидация urlHandler.addPre(params => { const data = params.get("data"); if (data) { console.log("Pre-stage: raw data", data); } }); // Main: основная логика urlHandler.addMain(params => { const data = params.get("data"); if (data) { const json = JSON.parse(decodeURIComponent(data)); console.log("Main-stage: parsed JSON", json); } }); // Post: финальные действия urlHandler.addPost(params => { console.log("Post-stage: done processing URL params"); }); // Запуск всех стадий urlHandler.run();