JavaScript 名前空間

| トラックバック(0)

必要なのかどうなのかは微妙な所だが、様々なJavaScriptライブラリを混在させて使用する際には必要になってくる。ちょっと検索で引っ掛けるといくらか書き方は出てくるし、オライリーの本にも一応書かれているが、これぞという使い勝手のものが無いので自作した。

/*
* 名前空間付きobject作成クラス
* @param {string} packagedObjectName パッケージ+オブジェクト名
* @param {object} obj オブジェクトorコンストラクタ関数
* @throws {Error} 名前空間が既存のオブジェクトと被った場合
*
* ex:
* [オブジェクト作成]
* new Namespaced('com.chrhsmt.obj', {
* variable: '',
* method: function() {}
* });
*
* [クラス作成]
* new Namespaced('com.chrhsmt.Class', function(){});
*/
function Namespaced(packagedObjectName, obj){
var DOT = '.';
var CONSTRUCT_PHRASE = ' = {};';
var ns = packagedObjectName.split(DOT);
var here = 'window';

for (var i = 0, l = ns.length; i < l; i++){
var tmp = here + DOT + ns[i];
if (!eval(tmp)) {
eval(tmp + CONSTRUCT_PHRASE);
} else if (typeof(eval(tmp)) != 'object') {
throw new Error("Namespace error : " + tmp + " = " + eval(tmp));
}
here = tmp;
}

//オブジェクト代入
obj == null ? obj = {} : void(0);
eval(here + ' = obj');
}

こんな感じで。ソースは以下。
http://chrhsmt.com/js/namespace.js






トラックバック(0)

このブログ記事を参照しているブログ一覧: JavaScript 名前空間

このブログ記事に対するトラックバックURL: http://blog.chrhsmt.com/mt-tb.cgi/148