Страницы

Поиск по вопросам

понедельник, 18 марта 2019 г.

Как правильно писать библиотеку?

Пишу скрипт показа сообщения .Файл notify.js
;(function(){ function Notify(titleText, messageText) {
var notify = document.createElement("div"); notify.className = "notify"; var title = document.createElement("div"); title.className = "notify title"; title.innerHTML = titleText; var message = document.createElement("div"); message.className = "notify message"; message.innerHTML = messageText;
notify.appendChild(title); notify.appendChild(message); function show(){ document.body.appendChild(notify); } } })();
При подключении скрипта в index.html и при вызове Notify("title","message").show() ошибка Notify is not defined и это понятно, но как по-другому писать, чтобы не было конфликтов с локальными скриптами? Много ошибок допускаю, скажите, какие? Как правильно организовать код, писать библиотеку?


Ответ

У Вас код локально создался и... умер, т. к. при завершении функции, её окружение уничтожается. Исключение - замыкание (например, ссылка на какие-то данные сохраняется и после завершения работы).
// В параметрах передаём модуль и this (глобальный объект, не обязательно window) (function(myModule, global){ // Если есть система зависимостей AMD, добавляем модуль туда if(typeof define === "function" && define.amd) define("logger", [], () => myModule()); // Если же это RequireJS, не будем идти против воли Творца :) else if(typeof module !== 'undefined' && module.exports) module.exports = myModule(); // Если систем сборки нет, значит экспортируем в глобальный объект else global['logger'] = myModule(); }(function(){ let myModule = _ => console.info(`Вывод '${_}' через модуль`); return myModule; }, this)); // Сработает 3-я ветка экспорта logger('Test');
Но стандарт устанавливает более интересную конструкцию для модулей, рекомендую с ней ознакомится

Комментариев нет:

Отправить комментарий