Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

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の方は…。必要なくね?とか言ってみる。
うくく。