2015-09-16 3 views
2

В Javascript есть ли способ привязки и обработчика событий активации и окончания одной функции?Обработчик события привязки Javascript другой функции, активизирующей/заканчивающей

Так, например, у меня есть две функции:

function one() { console.log("this is function one") }

и

function two() { console.log("this is function two") }

Я хочу функцию два, чтобы активировать и когда функция одна называется и когда она заканчивается. Очевидно, что я мог бы просто:

function one() { two(); console.log("this is function one"); two() }

, но это было бы скучным - не так интересно, как этот путь.

+1

Здесь [обработанный пример получения аспектов и точек в JS с нуля] (https://smthngsmwhr.wordpress.com/2013/06/23/aspect-oriented-programming-in-javascript/) - но возможно, это похоже на проблему XY? Что именно вы пытаетесь сделать? –

+1

* «но это было бы скучно» * - Скучный код обычно более надежный, чем «интересный» код. – nnnnnn

+0

@nnnnnn Ну, если ответ окажется сложным, я, вероятно, не буду его использовать. – Quelklef

ответ

5

Ну, вы можете написать функцию, которая обертывает исходную функцию в другую, которая вызывает обратный вызов.

function bindStartEnd(originalFn, callback, thisArg) { 
    return function() { 
     var returnValue; 
     callback(); 
     returnValue = originalFn.apply(thisArg || null, arguments); 
     callback(); 
     return returnValue; 
    }; 
} 

Он может быть использован, как это:

function one() { 
    console.log("This is function one"); 
} 
function two() { 
    console.log("This is function two"); 
} 
var three = bindStartEnd(one, two); 
three(); 

И это может быть продлен также принять два обратных вызовов, один для начала и один для конца. Вы могли бы также подумать о более лучшем имени.

+0

Итак, как я понимаю, вы передаете: функцию с двойным исполнением и b: оригинальную функцию, а затем возвращает функцию, которая будет выполнять три? – Quelklef

+0

@Quelklef Первым параметром является исходная функция, 'callback' - это функция с двойным исполнением. –

+0

Верно, мое плохое. [Не выполняется дважды для меня] (http://codepen.io/Quelklef/pen/dYGwxX?editors=001), нечетное – Quelklef