Задать вопрос

Как определить событие вызова функции?

Добрый день.
Есть довольно большой класс на js. И требуется возможность при переходе в определенный режим отрубить 80% функционала, а при попытке обращения к функционалу ругаться. Как можно определить при вызове функции что функция вызвана и сделать какие-либо проверки и прерывание функции, при этом не дописывая в начало каждой функции условие с выходом?
Просто при наличии ~100 методов класса редактировать каждый муторно, а если появится еще один режим работы - это вообще повеситься:(

UPD. Немного перефразирую. Есть примерно вот что:
vat test = function() {
	this.block1 = $('block1');
	this.block2 = $('block2');
	
	//переключатель
	//при true все вызовы должны быть перенаправлены на метод с кастомной ошибкой
	this.enable = false; 
	
	//обработчики событий
	this.events = {
		block1: {
			event1: function(e){},
			event2: function(e){}
		},
		block2 ...
	}
	
	this.bindEvents = function() {
		this.block1.on('click', this.events.block1.event1)
		this.block2.on('click', this.events.block1.event2)
		...
		//еще куча привязок
	}
	
	//общие методы для обработки данных, 
	//которые могу вызываться как из разных внутренних событий
	//так и извне
	this.someMethod1 = function() {}
	this.someMethod2 = function() {}
	...
	
	this.bindEvents();
}

Как можно видоизменить структуру, чтобы (new test()).enable = true требуемые события и методы(не все) блокировались , при этом не дописывать условия выхода в каждом методе.
Честно говоря не представляю как это сделать абстрагированием:(
  • Вопрос задан
  • 468 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
IonDen
@IonDen
JavaScript developer. IonDen.com
Попахивает неправильным проектированием.

Нужно сделать ровно наоборот. Базовый класс должен обладать минимумом методов, которые используют все, а уж дальше, в зависимости от сценария, наследники расширяют его функционал своими методами.
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Вам нужно AOP. А еще в ES7 есть декораторы.
Ответ написан
@M-ka
frontend присматривающийся к ror
А еще почитайте это и это.
Но в любом случаи переделывать нужно
Ответ написан
Комментировать
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Месье знает толк...
Тут явно что то не то, но все же можно , но не нужно, что то наподобие этого:
var test=function(){

           this.enable = false;

           this.protectedFunc1=function(){
                console.warn('Protected func1 called!');
           }

           this.protectMethod=function(fn){
               var self=this,
                   fn;

               if(typeof fn!=='function'){
                   throw TypeError('Given thing is not a function!');
               }


               return function(){

                   console.log(self.enable);

                   if(!self.enable){
                       throw Error('Access to protected method not allowed');
                   }

                   return fn.apply(self,arguments);
               };
           }

           this.protectedFunc1=this.protectMethod(this.protectedFunc1);

           this.protectedFunc2=this.protectMethod(function(args){
               console.warn('Protected func1 called!');
           })


       }


       var obj=new test;

       obj.enable=true;
       obj.protectedFunc1(); //Protected func1 called!

       obj.enable=false;
       obj.protectedFunc1();// Error: Access to protected method not allowed
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы