Kumu on AOP
まー所詮デコレータなんだけどあった方がいいよねってことで。
なるべくシンプルに。
aop.js
kumu.addBefore = function(func, before) { return function() { return func.apply(this, before(arguments, func)); }; }; kumu.addAfter = function(func, after) { return function() { return after(func.apply(this, arguments), arguments, func); }; }; kumu.addAround = function(func, around) { return function() { return around(arguments, func); }; };
どっかで見た事あるなーとか思いつつまあよいとする。
test.html
function makeGreeting(text) { return "Hello " + text + "!"; } function aopizeAdvice(args) { args[0] = "AOP " + args[0]; return args; } function upperAdvice(result) { return result.toUpperCase(); } function testAdvice(text, func) { return "ARROUND "+ func(text[0]); } //before makeGreeting = kumu.addBefore(makeGreeting, aopizeAdvice); alert(makeGreeting("world")); //after makeGreeting = kumu.addAfter(makeGreeting, upperAdvice); alert(makeGreeting("world")); //arroud makeGreeting = kumu.addAround(makeGreeting, testAdvice); alert(makeGreeting("world"));
adviseで引数を使うとき配列になるのでうーんって感じもするなあ…。
(多分展開すればなんとかるかも)
まーやっぱあった方が便利かも。
DIの方は…。必要なくね?とか言ってみる。
うくく。