変わった書き方でオブジェクトを返す

はじめてみたけどこんな書き方があるんだなー。

hoge = {};
hoge.test = function(){
  var Test = function(){
    this.hello = function(s){
      return s+'hello';
    }
  };
  return Test;
}
var Test = hoge.test();
var init = new Test();
init.hello('hi!');

一度オブジェクトを返して、
そのオブジェクトからオブジェクトを作るってことだよね。
こういう柔軟な言語構造がjavascriptのすごいとこだ。
自然といえば自然だけどすごくトリッキーな気もする。
Climb That Mountain: JavaScript Testing with Mocha