19 ноября 2009-го

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

19 ноября 2009, 9:14

Hard Javascript: Chain Fucntions (jQuery style) -> Функции цепочками Избранное

Давно хотел разобраться с функциями через точечку, то есть с теми, что по цепочке, как в любимом jQuery. В самом коде jQuery можно сломать голову, потому искал просветления в инете, и довольно безрезультатно, пока не наткнулся на маленькую либу $fx для анимации, и на меня сошло озарение.

Всё довольно просто и через замыкание функции в конце:
$ = function(v) {
	if (v.nodeType && v.nodeType == 1) var f = v;
	else if (typeof v == "number") {
		var f = {"result":v};
	} else return null;
  f.plus = function (nmbr) {
  		nmbr = nmbr || this.result;
  		this.result += nmbr;
      return this;
  };
  f.minus = function (nmbr) {
  		nmbr = nmbr || this.result;
  		this.result -= nmbr;
      return this;
  };
  f.multiply = function (nmbr) {
  		nmbr = nmbr || this.result;
  		this.result *= nmbr;
      return this;
  };
  f.divide = function (nmbr) {
  		nmbr = nmbr || this.result;
  		this.result  /= nmbr;
      return this;
  };	    
  return f;
}
Вкратце, проверяем первый аргумент:
  • если функция (объект, без разницы в JS), присваиваем к главной функции с подлепрамифункциями(нодами)
  • если число, то создаём объект с параметром result
  • дальше следует замыкание через «return f»;
Что бы получить результат, пишем всё вот так:
$(10).plus(5).minus(7).divide(2).multiply(3).result


16 ноября 2009-го  . . .       Ctrl       20 ноября 2009-го