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


1 комментарий РСС

sartas
Я тоже заинтересовался цепочками, пока нахожусь в поиске оптимального решения. Как это реализовано в jQuery описано здесь: http://www.yeti-factory.org/?p=9

Vitaliy Bogdanets
Полезная ссылка :)
В заначке есть ещё один способ, через «самовыполнение» функции!

Ваш комментарий

адрес не будет опубликован

ХТМЛ не работает


Ctrl + Enter