マルチプルインスタンスクロージャ(改) 複数クロージャ

最近クロージャばっかりだが、性懲りも無く続ける。
前回はクロージャ関数がひとつだけだったので、直接関数オブジェクトを返せばよかったが、複数メソッドを外部からアクセスできるようにするには?

とりあえず素直に考えたのがコンストラクタを使うもの。
コンストラクタのローカル変数を内部関数で参照し、内部関数をインスタンスで保持する。
コードは以下

'use strict';

// closure

var myCounter;

if (!myCounter) {
	
	myCounter = {};		// 名前空間オブジェクト生成
	
	// コンストラクタ(エンクロージャ)
	myCounter.Create = function () {
		var cnt = 0;		// クロージャ
		
		// カウントアップ
		this.CountUp = function () {
			return ++cnt;
		};
		
		// カウントダウン
		this.CountDown = function () {
			return --cnt;
		};
		
		// カウンタクリア
		this.Reset = function () {
			return cnt = 0;
		};
	}
}

var cnt0 = new myCounter.Create;
var cnt1 = new myCounter.Create;

console.log('cnt0:' + cnt0.CountUp());
console.log('cnt0:' + cnt0.Reset());
console.log('cnt0:' + cnt0.CountDown());
console.log('cnt1:' + cnt1.CountDown());
console.log('cnt1:' + cnt1.CountUp());
console.log('cnt0:' + cnt0.CountDown());
console.log('cnt1:' + cnt1.CountUp());

他方、ローカル変数に内部関数を保持して返す形も考えられる。こっちの方が正攻法なのだろうか?

'use strict';

// closure

var myCounter;

if (!myCounter) {
	
	myCounter = {};		// 名前空間オブジェクト生成
	
	// コンストラクタ(エンクロージャ)
	myCounter.Closure = function () {
		var cnt = 0;		// クロージャ
		var closure = {};	// クロージャをプロパティ保持する。
		
		// カウントアップ
		closure.CountUp = function () {
			return ++cnt;
		};
		
		// カウントダウン
		closure.CountDown = function () {
			return --cnt;
		};
		
		// カウンタクリア
		closure.Reset = function () {
			return cnt = 0;
		};
		
		// クロージャを返す
		return closure;
	}
}

var cnt0 = myCounter.Closure();
var cnt1 = myCounter.Closure();

console.log('cnt0:' + cnt0.CountUp());
console.log('cnt0:' + cnt0.Reset());
console.log('cnt0:' + cnt0.CountDown());
console.log('cnt1:' + cnt1.CountDown());
console.log('cnt1:' + cnt1.CountUp());
console.log('cnt0:' + cnt0.CountDown());
console.log('cnt1:' + cnt1.CountUp());