Edited at

Javascriptで名前空間を簡単に使う

More than 1 year has passed since last update.


概要

Javascriptで名前空間を簡単につかう方法を考えてみたよ。


ヘルパー関数を作る

追記:実際つかってたら動かないことに気付いたので修正した。使用例はそのまま動くはず。

(function() {

function splitNs(nsStr) {
return nsStr.split(".");
}

function ret(nsStr) {
function ret_helper(rt, symo) {
if(symo.length > 0) {
var now = symo.shift();
if(!(Object.prototype.toString.call(rt[now]) === '[object Object]')) {
rt[now] = {};
}
return ret_helper(rt[now], symo);
} else {
return rt;
}
}

return ret_helper(window, splitNs(nsStr));
}

window.use = function(nsStr, self) {
var nss = splitNs(nsStr);
var obj = self[nss[0]];
for(var i = 1; i < nss.length; i += 1) {
obj = obj[nss[i]];
}
self[nss[nss.length - 1]] = obj;
};

window.ns = function(sym, fn) {
fn.call(ret(sym));
};
})();


使ってみる


  • 使用例

ns("a.b", function() {

this.Cls = function() {
function qoo() {
console.log("qoo!");
}

var pub = {};
pub.qoo = qoo;
return pub;
};
});
ns("a.b.c", function() {
this.x = 1;
});

$(document).ready(function() {
(function() {
use("a.b.c", this);
use("a.b.Cls", this);

console.log("c.x", c.x);
(new Cls()).qoo();
})();
});


  • 出力

c.x 1

qoo!