Выполнение AOP с использованием meld.js(cujojs) для автономных функций javascript не работает

Когда я пытаюсь реализовать AOP, используя meld.js (из cujojs) для автономных функций javascript, он НЕ выполняет Advice. Я пытался с приведенным ниже кодом.

var meld = require("meld")

function afterReturn(returnValue){
       console.log(returnValue);
}

function test(x,y) {
      console.log(x);
      console.log(y);
      return x+y;
}

var remover = meld.afterReturning(test, afterReturn);

test(5,6);:

5 И 6

Но когда я обертываю функцию внутри некоторого объекта (myo), она работает. Я не хочу, чтобы обернуть функции внутри любого объекта.

var meld = require("meld")

function x(returnValue) {
    console.log(returnValue);
}

var myo = {
   test : function(x,y) {
      console.log(x);
      console.log(y);
      return x+y;
   }
}

var remover = meld.afterReturning(myo,'test', x);

myo.test(5,6);:

5, 6 И 11

Не могли бы вы исправить меня, где я делаю неправильно.

1 ответ

В JavaScript функции являются священными и никогда не могут быть изменены внешне. При передаче функции напрямую, вместо объекта с методом, возвращаемое значение является рекомендуемой функцией.

Взгляните на второй пример кода для последующего возвращения https://github.com/cujojs/meld/blob/master/docs/api.md#meldafterreturning

var advisedFunction = meld.afterReturning(functionToAdvise, afterReturningFunction);

Другие вопросы по тегам