javascript ООП Пример работы с классом -- вызов одного метода класса из другого, вызов методов из обработчика -- пример кода

Ниже приводится пример работы фрагмента кода написанного в стиле ООП --
основное преимущество состоит в использовании изолированного пространства имён, то есть мы можем не бояться совпадения имен функций и переменных:

/**
 * Пример работы с "классом" - ООП на JavaScript
 */
function MyClassName() 
{  
    /**
     * Для вызова методов класса из других методов, вызванных в обработчиках
	 */
	var self = this; // ВАЖНО: назначим псевдоним
    
    
    // набор каких-то элементов видимых в данном классе
    var fromAppearcontrolSelector = ".reset-task-for-package";
    var formBlockSelector = "#modal-reset-task-package";
    var formSendControl = "#reset-task-package-button";
    var resultResetMessageSelector = "#task-package-reset-message";

    // далее методы класса 
    
    this.init = function() {
        // например, привязываем обработчики
        $(fromAppearcontrolSelector).on('click',function(){
            $.simplebox(formBlockSelector);

            return false;
        });
        
        $(formSendControl).on('click', this.resetTaskPackage); // вызываем другой метод класса из обработчика
    };
    
    /**
     * В этйо функции для обращения к классу мы будем использовать псевдоним 
     * self, это позволит использовать её внутри обработчиков событий
     * -- как это и происходит в методе init() выше
     * 
     * @returns {Boolean}
     */
    this.resetTaskPackage = function() {
        
        var formData = $('#task-package-reset-form').serialize();
        
        // вызваем один метод класса из другого
        self.resetMessage(); 
         // (вызов другого метода класса без this)
        self.sendAjax('/ajax/resettaskpackagepartner4/', formData);
        
        return false;
    }
    
    this.sendAjax = function(url, data) {
        showLoaderIdentity(); //  показываем идентификатор загрузки
    
        $.ajax({ //  сам запрос
        type: 'POST',
        url: url,
        data: data, // данные которые передаём  серверу
        dataType: "json" // предположительный формат ответа сервера
        }).done(function(res) { // если успешно
            hideLoaderIdentity(); // скрываем идентификатор загрузки
            console.log('Ответ получен: ', res);

            if (res.success) { // если все хорошо
                console.log('ОК!)');
                self.showMessage(res.message);
                
                
               // setInWorkStatus(data['batch-id']); 
               // removeUpdateLink(data['batch-id']);


            } else { // если не нравится результат
                console.log('Пришли не те данные!');
                //alert(res.message);
            }
        }).fail(function() { // если ошибка передачи
            hideLoaderIdentity();
            console.log('Ошибка выполнения запроса!');
        });
    }
    
    this.showMessage = function(message)
    {
        $(resultResetMessageSelector).text(message);
    }
    
    this.resetMessage = function()
    {
        $(resultResetMessageSelector).text('');
    }

};

/*
 * Jquery инициаллизация после загрузки страницы 
 */
$(function() { 
     
	var taskPackage = new MyClassName();
	taskPackage.init();    
});