Test-Driven JavaScript Development に記述されている名前空間ユーティリティを実装してみる
SEE ALSO
git clone http://tddjs.com/code/06-applied-functions-and-closures.git
test作成
TestCase("NameSpaceTest", { tearDown: function () { delete MyApp.hoge; }, "test should create non-existent object" : function () { MyApp.namespace("hoge"); assertObject(MyApp.hoge); }, "test should not overwrite existing objects": function () { MyApp.hoge = { fuga: {} }; var result = MyApp.namespace("hoge.fuga"); assertSame(MyApp.hoge.fuga, result); }, "test only create missing parts": function () { var hash = {}; MyApp.hoge = { fuga: { piyo: hash } }; var result = MyApp.namespace("hoge.fuga.ui"); assertSame(hash, MyApp.hoge.fuga.piyo); assertObject(MyApp.hoge.fuga.ui); } });
実装
var MyApp = (function () { function namespace(string) { var object = this; var levels = string.split("."); for (var i = 0, l = levels.length; i < l; i++) { if (typeof object[levels[i]] == "undefined") { object[levels[i]] = {}; } object = object[levels[i]]; } return object; } return { namespace: namespace }; }());
quick sample
% git clone git@github.com:okamuuu/Practice-JsNameSpace.git % sh script/jstestdriver.sh