#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.
Комментариев нет:
Отправить комментарий