0

当我尝试使用meld.js(来自cujojs)为独立的javascript函数实现AOP时,它没有执行建议。我一直在尝试使用下面的代码。

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

你能纠正我哪里做错了吗。

4

1 回答 1

0

在 JavaScript 中,函数是神圣的,永远不能被外部篡改。直接传递函数时,而不是带有方法的对象,返回值是建议函数。

查看 afterReturning https://github.com/cujojs/meld/blob/master/docs/api.md#meldafterreturning的第二个代码示例

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

于 2017-11-24T17:55:02.533 回答