네임스페이스 패턴에서는 단 하나의 전역 객체를 생성했다. 샌드박스 패턴에서는 생성자를 유일한 전역으로 사용한다. 그리고 유일한 전역인 생성자에게 콜백함수를 전달해 모든 기능을 샌드박스 내부 환경으로 격리 시키는 방법을 사용한다.

function Sandbox() {
	    // argument를 배열로 바꾼다
	var args = Array.prototype.slice.call(arguments),
	    // 마지막 인자는 콜백 함수 
	    callback = args.pop(),
	    // 모듈은 배열로 전달될 수도있고 개별 인자로 전달 될 수도 있다
	    modules = (args[0] && typeof args[0] === "string") ? args : args[0],
	    i;

	// 함수가 생성자로 호출되도록 보장(new를 강제하지 않는 패턴)
	if (!(this instanceof Sandbox)) {
		return new Sandbox(modules, callback);
	}

	// this에 필요한 프로퍼티들을 추가
	this.a = 1;
	this.b = 2;

	// "this객체에 모듈을 추가"
	// 모듈이 없거나 "*"(전부)이면 사용 가능한 모든 모듈을 사용한다는 의미입니다.
	if (!modules || modules === '*' || modules[0] === '*') {
		modules = [];
		for (i in Sandbox.Modules) {
			if (Sandbox.modules.hasOwnProperty(i)) {
				modules.push(i);
			}
		}
	}

	// 필요한 모듈들을 초기화
	var m_length = modules.length;
	for (i=0; i<m_length; i+=1) {
		Sandbox.modules[modules[i]](this);
	}

	// 콜백 함수 호출
	callback(this);
}

// 필요한 프로토타입 프로퍼티들을 추가
Sandbox.prototype = {
	name: "nextree",
	getName: function () {
		return this.name;
	}
};

그리고 다음과 같이 new키워드를 사용하지 않고 ‘ajax’와 ‘dom’이라는 가상의 모듈을 사용하는 객체를 생성 한다. 이처럼 사용할 모듈들을 앞쪽 인자(argument)로 전달해주고, 마지막 인자로는 콜백 함수를 전달해 준다.

Sandbox ('ajax', 'dom', function (box) {
	// console.log(box);
});

이렇게 샌드박스 패턴을 사용하면 콜백 함수로 감싸진 샌드박스 객체 안에서 구현이 가능하다. 또한 위에서 언급했던 네임스페이스 패턴의 몇 가지 단점을 극복할 수 있다.