Guest User

Untitled

a guest
Dec 16th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. // Функция реализующая каррирование
  2. Function.prototype.partial = function() {
  3. // Сохраняем контект и аргументы текущей функции
  4. var fn = this,
  5. args = Array.prototype.slice.call(arguments);
  6.  
  7. // Т.к. partial - функция, то мы должны вернуть функцию
  8. // Кроме того, мы замыкаем fn и args, чтобы сохранить их
  9. return function() {
  10. // Проходим по списку аргументов
  11. var arg = 0;
  12. for( var i = 0; i < args.length && arg < arguments.length; i++ ) {
  13. if(args[i] === undefined) {
  14. // Заменяем аргументы undefined на аргументы из текущей функции
  15. args[i] = arguments[arg++];
  16. }
  17. }
  18.  
  19. // Вызываем функцию с новым списком аргументов
  20. return fn.apply(this, args);
  21. }
  22. };
  23.  
  24. /* Использование */
  25. // 1. Делаем отложенную функцию
  26. var delay = setTimeout.partial(undefined, 1000);
  27. delay(function() {
  28. console.log("Delayed function");
  29. });
  30.  
  31. // 2. Делаем вызов callback, но сам callback передаём позже
  32. var bindClick = document.getElementById("button").addEventListener.partial("click", undefined, false);
  33. bindClick(function() {
  34. console.log("Button was clicked!");
  35. });
Add Comment
Please, Sign In to add comment