ひがやすを技術ブログ

電通国際情報サービスのプログラマ

名前空間

ActionScriptで、aaa.bbb.Cccというクラスを定義するには、
_global["aaa"] = new Object();
_global["aaa"]["bbb"] = new Object();
_global["aaa"]["bbb"]["Ccc"] = function(){};
のようにします。そうすると
c = new aaa.bbb.Ccc();
でオブジェクトを作成できます。
これを汎用的に定義したのがseasar.lang.SObject#defineClazzです。

seasar.lang.SObject.defineClazz =
  function(className, constructorFunc) {
    var cn_array = className.split(".");
    var num = cn_array.length - 1;
    var package = _global;
    for (var i = 0; i < num; ++i) {
      if (package[cn_array[i] ] == null ) {
        package[cn_array[i] ] = new Object();
      }
      package = package[cn_array[i] ];
    }
    if (constructorFunc != null) {
      package[cn_array[num] ] = constructorFunc;
    } else {
      package[cn_array[num] ] = function() {
        super(arguments);
      }
    }
    return package[cn_array[num] ];
}