新人のMです。 学生時代は、pythonをいじってたりしたので、今回はpythonの機能からjsで実装できそうなものを作ってみたいと思います。
pythonのdecorator
関数の処理の前後に任意の処理を飾り付けれる機能のことです。いわいるデコレータパターンだと思います。
def deco(opt): def wrapper(func): def impl(*args, **kwargs): print args, kwargs, opt print "before" r = func(*args, **kwargs) print "after" return r + opt return impl return wrapper @deco(1) def f(a): print a return a f(2) => 3
javascriptでの実装
var deco = function() { var args = arguments; var wrapper = function(fn) { var impl = function() { console.log("decorator arg", args, "wraper arg", arguments); console.log("preprocess"); var r = fn.apply(this, Array.prototype.slice.call(arguments)); console.log("postprocess"); return r + ":" + Array.prototype.join.call(args); } return impl; } return wrapper; }; var f = deco(1)(function() { console.log(arguments); return Array.prototype.join.call(arguments); f(2, 3); => "2,3:1"
まとめ
javascriptでpythonのdecoratorを実装例を示してみました。 デコレータを使うことで、定型的な前処理・後処理をまめることができると思います。