dojo toolkitやってみる 3
dojo/aspectの3つの関数のうち、aroundを使ってなかったので使ってみる。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Tutorial: Hello Dojo!</title> </head> <body> <h1 id="greeting">Hello</h1> <h1 id="greetingJa">こんにちは</h1> <!-- load Dojo --> <script src="dojo/dojo.js" data-dojo-config="async: true"></script> <script> require(['dojo/dom','dojo/aspect','dojo/domReady!'], function(dom,aspect){ aspect.around(dom, 'byId', function(/*元のfunctionもしくは次に実行されるべきadvise*/original){ return function(id){ //aroundはこのfunctionが呼ばれたときに代わりに実行されるべきfunctionを返します。 console.log('before'); //元のfunctionを呼ぼうとしてdom.byId(id)とやると死ぬる var ret = original.apply(this,[id]); console.log('after'); return ret; } }); var x = dom.byId('greeting'); x.innerHTML += ' World'; }); </script> </body> </html>
after,around,beforeの使い分けは、下記のような感じになるかと思います。
before: functionの呼び出し前に別の処理を行いたい、引数を加工したい
after: functionの呼び出し後に別の処理を行いたい、返り値を加工したい
around: functionの前後に処理を挟みたい、場合によっては元のfunctionの呼び出しを行わなくしたい
javascriptでaopはjavaに比べたら全然実装しやすいとは思いますが、元々仕組みが用意されていると言うのは良いですね。