#javascript
Пишу скрипт показа сообщения .Файл 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 и это понятно, но как по-другому писать, чтобы не было конфликтов с локальными скриптами? Много ошибок допускаю, скажите, какие? Как правильно организовать код, писать библиотеку?
Ответы
Ответ 1
У Вас код локально создался и... умер, т. к. при завершении функции, её окружение уничтожается. Исключение - замыкание (например, ссылка на какие-то данные сохраняется и после завершения работы). // В параметрах передаём модуль и 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'); Но стандарт устанавливает более интересную конструкцию для модулей, рекомендую с ней ознакомится.Ответ 2
Notify у вас определён в области видимости внутри кложуры, его не видно снаружи. В вашем случае может подойти паттерн модуль, тогда из функции возвращается объект. Но вообще, сейчас в ECMAScript есть стандарт модулей. Это будет работать, если использовать что-то вроде Babel. Также можно использовать CommonJS require.
Комментариев нет:
Отправить комментарий