Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Функция реализующая каррирование
- Function.prototype.partial = function() {
- // Сохраняем контект и аргументы текущей функции
- var fn = this,
- args = Array.prototype.slice.call(arguments);
- // Т.к. partial - функция, то мы должны вернуть функцию
- // Кроме того, мы замыкаем fn и args, чтобы сохранить их
- return function() {
- // Проходим по списку аргументов
- var arg = 0;
- for( var i = 0; i < args.length && arg < arguments.length; i++ ) {
- if(args[i] === undefined) {
- // Заменяем аргументы undefined на аргументы из текущей функции
- args[i] = arguments[arg++];
- }
- }
- // Вызываем функцию с новым списком аргументов
- return fn.apply(this, args);
- }
- };
- /* Использование */
- // 1. Делаем отложенную функцию
- var delay = setTimeout.partial(undefined, 1000);
- delay(function() {
- console.log("Delayed function");
- });
- // 2. Делаем вызов callback, но сам callback передаём позже
- var bindClick = document.getElementById("button").addEventListener.partial("click", undefined, false);
- bindClick(function() {
- console.log("Button was clicked!");
- });
Add Comment
Please, Sign In to add comment