Если твоя библиотека делится на модули, и они зависимы друг от друга, то ты можешь использовать паттерн "иньекция зависимости", вот держи братишка, я тебе иньектор принес:
var module = new function () {
var modules = {};
function inject(factory) {
var require = factory.toString()
.match(/\(([\s\S]*?)\)/)[1]
.match(/[\$\w]+/img) || [];
return factory.apply(null, require.map(module));
}
function module(name, factory) {
if (!factory) {
var module = modules[name];
return module.instance || (module.instance = inject(module.factory));
}
modules[name] = {
factory : factory,
instance: null
};
}
return module;
};
работает функция module так
// описываем модуль
module('http', function () {
return {
ololo: function () {
alert('ololo!')
}
}
});
// обращаемся к модулю
var http = module('http');
http.ololo() // ololo!
вторым аргументом передается функция "фабрика", тот обьект который она вертет он и будет модулем, и он будет возвращаться при module('http'). Все модули создаются только один раз, так что
module('http') === module('http').
Если какой-то модуль зависит от другого модуля то мы можем в коде одного модуля обратиться к другому:
module('http', function () {
return {
}
});
module('ajax', function () {
// обратились из одного модуля к другому
var http = module('http');
return {
}
});
но лучше просто написать ИМЯ необходимого модуля в параметрах к функции фабрике) тогда туда ПО ИМЕНИ необходимй модуль и передастся.
module('http', function () {
return {
}
});
module('ajax', function (http) {
http //модуль автоматически подключился по имени аргумента
return {
}
});
Ну или если тебе не нужны всякие модули, иньекции, то используй просто такой шаблон:
var myLibrary = new function () {
function trim() {
}
function find() {
}
// функция которая не будет доступна извне, она является внутренней для библиотеки
function select() {
}
// функции которые хотим сделать доступными пользователю
return {
trim: trim,
find: find
}
};