Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что делать с повторяющейся условной конструкцией. (https://javascript.ru/forum/misc/44545-chto-delat-s-povtoryayushhejjsya-uslovnojj-konstrukciejj.html)

finestra 23.01.2014 21:54

Что делать с повторяющейся условной конструкцией.
 
Всем доброй ночи. У меня родился код. Нужен совет, что с ним делать.
elem.addEventListener('keyup', function(e){
	if(e.keyCode === 13) {
		if(e.target.value.length === 1) {
			fn1();
		} else {
			fn2();
		}
	} else {
		if(e.target.value.length === 1) {
			fn3();
		} else {
			fn4();
		}
	}
}, false);

Условие - if(e.target.value.length === 1) {…} else {…}, неоднократно повторяется. Хотел бы знать, как программисты js в таких случаях кодируют.

Vlasenko Fedor 23.01.2014 22:40

пример
elem.addEventListener('keyup', function(e){
    var val = e.target.value.length == 1;
    e.keyCode == 13 ? val ? fn1(): fn2(): val ?  fn3(): fn4();
}, false);

finestra 23.01.2014 23:27

спб за отклик. дело в том, что функция будет расширяться и в этом коде я запутаюьс.
у меня есть свой пример, и я хотел узнать есть ли решение лучше этого -
var keyup = (function(){
	var TmpMethod = function(fnTrue, fnFalse) {
		this.fnTrue = fnTrue || function(){};
		this.fnFalse = fnFalse || function(){};
	};

	TmpMethod.prototype.invoke = function(val){
		if(val) {
			this.fnTrue();
		} else {
			this.fnFalse();
		}
	};

        var strategy = {};
	
	strategy['13'] = new TmpMethod(function(){ alert('true') }, 
							function() { alert('false') });
	strategy['default'] = new TmpMethod();
	
	return function(e) {
		var key = (e.keyCode in strategy) ? e.keyCode : 'default';
		strategy[key].invoke(e.target.value.length);
	};
	
}());


Часовой пояс GMT +3, время: 07:49.