所以,我在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;
时,它将返回原始函数。
如何实现这一目标?