面向方面的编程而不修改原始

时间:2016-05-10 22:50:04

标签: javascript

所以,我在Javascript中看到过关于AOP的例子,其中大多数都是这样的:

var foo = somefunc.after(function() { // after is some function already made
    console.log("after!");
});

foo(); // logs "after"

像这样:

var foo = function() {
    console.log("something");
};

foo = (function() {
    var original = foo;

    return function() {
        console.log("before!");

        original.apply(this, arguments);
    }
})();

foo(); // logs "before" then "after"

或者像这样:

function Foo() {
    console.log("foo");
}

var original = Foo;
Foo = function() {
    original();
    moreStuff();
}

function moreStuff() {
    console.log("hi");
}

Foo();
// logs "foo" then "hi"

但是,想要的是一种不修改原始函数的方法,您不必将其设置为变量。我在寻找你能做到的地方:

function foo() {
    console.log("foo!");
}

foo.after(function() {
    console.log("after");
});

// and then

console.log(foo);

/* and it will log:
 *
 * function foo() {
 *   console.log("foo!");
 * }
 *
 * Original function stays the same
 */

foo();
// logs "something" then "before"

基本上,当此人调用该函数时,它使用修改后的版本,但当一个人刚收到函数的值foo;时,它将返回原始函数。 如何实现这一目标?

0 个答案:

没有答案