JavaScript 〜 YUIの名前空間関数namespaceを読む

YUIのnamespace関数は下記である。

    * @method namespace
    * @param  {string*} arguments 1-n namespaces to create.
    * @return {object}  A reference to the last namespace object created.
    */
    namespace: function() {
        var a = arguments, o = this, i = 0, j, d, arg;
        for (; i < a.length; i++) {
            // d = ('' + a[i]).split('.');
            arg = a[i];
            if (arg.indexOf(PERIOD)) {
                d = arg.split(PERIOD);
                for (j = (d[0] == 'YAHOO') ? 1 : 0; j < d.length; j++) {
                    o[d[j]] = o[d[j]] || {};
                    o = o[d[j]];
                }
            } else {
                o[arg] = o[arg] || {};
            }
        }
        return o;
    }

読んだままなんだけど、書いたから簡単に解説を書く。

    * @method namespace
    * @param  {string*} arguments 1-n namespaces to create.
    * @return {object}  A reference to the last namespace object created.
    */
    namespace: function() {
        var a = arguments, //実行時引数を変数aに格納。例えば、「"YUI.MYAPP.modules.module1"」 
      o = this, 
      i = 0, j, d, arg;
        //引数の長さだけ繰り返す。1文字列の場合、繰り返しは1回
        for (; i < a.length; i++) {
            // d = ('' + a[i]).split('.');

            //引数が"YUI.MYAPP.modules.module1"の場合、arg="YUI.MYAPP.modules.module1"
            arg = a[i];
      
            //argがピリオドで区切られて、名前空間がネストしているかで場合分け
            if (arg.indexOf(PERIOD)) {
                //argが"YUI.MYAPP.modules.module1"の場合、d = [YUI,MYAPP,modules,module1]となる。
                d = arg.split(PERIOD);

        //配列dの最初の要素が'YAHOO'の場合、次の要素から名前空間の存在をチェックして、存在しなければ{}を作成する
                for (j = (d[0] == 'YAHOO') ? 1 : 0; j < d.length; j++) {
                    o[d[j]] = o[d[j]] || {};
                    o = o[d[j]];
                }
            } else {
                o[arg] = o[arg] || {};
            }
        }
    //名前空間の返却
        return o;
    }