ライブラリの一部でありながら単体利用も可能にする工夫
140文字を超えちゃうので、こちらで。
JavaScriptなコードを書いてると「このへんの処理はどこにも依存してないから、特定のライブラリの一部ではなく、単体でロードしても使えるような部品としてまとめられたらなぁ」とか「でも、ライブラリの一部として利用する場合にグローバルネームスペースを汚染するのはダメだよなぁ」と、考えたことはありませんか?
window.uu 以下をライブラリのネームスペースとして利用している uupaa.js では、このような工夫をしています。
// === uu.base64 / window.base64 === (function(namespace) { namespace.base64 = { encode: base64encode, // base64.encode(data:String/ByteArray, // toURLSafe64:Boolean = false):Base64String/URLSafe64String decode: base64decode // base64.decode(data:Base64String/URLSafe64String, // toByteArray:Boolean = false):String/ByteArray }; function base64encode() { ... } function base64decode() { ... } })(this.uu || this);
こうすることで、window.uu があれば uu.base64 が追加され、無ければ window.base64 が追加されるため、ソースコードが単体でも利用可能になります。
最後の行を window.uu || window とせず this.uu || this とすることでサーバサイドからの利用も、ちょっとだけ考慮しています。
シングルトンな構造にしたいなら
何度ロードされても一度しか初期化されないように(安全に)するには、こうします。
(this.uu || this).base64 || (function(namespace) { namespace.base64 = { ... } })(this.uu || this);
簡単ですね。
使い方
GoogleCodeリポジトリにあるコードを、直接呼び出すこともできます。
<script src="http://uupaa-js.googlecode.com/svn/trunk/0.8/src/misc/msgpack.js"></script> <script src="http://uupaa-js.googlecode.com/svn/trunk/0.8/src/misc/utf8.js"></script> <script src="http://uupaa-js.googlecode.com/svn/trunk/0.8/src/misc/base64.js"></script>