Показать сообщение отдельно
  #8 (permalink)  
Старый 21.03.2014, 22:15
Аспирант
Посмотреть профиль Найти все сообщения от Maxmaxmaximus12
 
Регистрация: 21.03.2014
Сообщений: 36

Если твоя библиотека делится на модули, и они зависимы друг от друга, то ты можешь использовать паттерн "иньекция зависимости", вот держи братишка, я тебе иньектор принес:


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
    }

};

Последний раз редактировалось Maxmaxmaximus12, 21.03.2014 в 22:31.
Ответить с цитированием