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; }