Site Tools


js_arch

Примеры архитектуры

1

(function (scope) { // <-- Здесь мы передаем область видимости куда будем пихать наш модуль
    // Шаблоны
    jQuery(function() { // <-- Анонимная функция
        var TemplateRenderer = (function() { . . . } )();  //<-- Создаем модуль с логикой

        if (scope.MyModule == null) { // <-- Проверяем, что имя модуля в нашей области видимости не создано.
            scope.MyModule = {};
        }
        if (scope.MyModule.TemplateRenderer == null) { // <-- Проверяем, что часть модуля еще не создана
            scope.MyModule.TemplateRenderer = TemplateRenderer; // <-- Если часть модуля не создана, то создаем ее.
        }
    });

    jQuery(function() { // <-- Тоже самое, для создания другой части модуля.
        var NotificationManager = (function() { . . . } )();

        if (scope.MyModule == null) {
            scope.MyModule = {};
        }
        if (scope.MyModule.Notifications == null) {
            scope.MyModule.Notifications = NotificationManager;
        }
    });

})(this); // <-- Это идет в переменную scope, в качестве обасти видимости куда мы будем записывать наш модуль.

2 PayPal

(function () {
    var PAYPAL = window.PAYPAL || {};
    window.PAYPAL = PAYPAL;
    PAYPAL.analytics = {};

    PAYPAL.analytics.Analytics = function (options) {
        this._init(options);
    };

    PAYPAL.analytics.Analytics.prototype = {
        
        options: { . . . many options}
    
        _init: function (options) {
            // set options
            this.setOptions(options);

            // add unload delay listener
            this.businessLogic();
        },
        
        setOptions: function (options) {
            this.options = this._mergeOptions(this.options, options);
        },
        
        _mergeOptions: function (options1, options2) {
          . . . код слияния options дефаултных и переданных при создание объекта. 
          //Пример вызова утилиты класса:
          this.utils.clone()
        }
        
    //Утилиты класса
    PAYPAL.analytics.Analytics.prototype.utils = {
        clone: function (obj) { . . . },
        merge: function (obj1, obj2) { . . . }
    }
}

Статические свойства

    function Hamster() {
        //this.food = []; // <-- раскомментировать это, чтобы не было статического свойства и оно было у каждого свое.
    }
    Hamster.prototype = {
        food: [],   // <-- Статические свойство за счет prototype
        found: function(something) {
            this.food.push(something)
        }
    };
    
    Hamster.prototype.test = function(){console.log(this.food)};

    speedy = new Hamster();
    lazy = new Hamster();

    speedy.found("apple");
    speedy.found("orange");

    speedy.test();
    lazy.test();

ссылки

Book

You could leave a comment if you were logged in.
js_arch.txt · Last modified: 2019/10/19 17:38 (external edit)

Page Tools