goog = {}; objThatDelegatesTo = function(x) { var f = function() { }; f.prototype = x; return new f(); }; goog.C = objThatDelegatesTo(goog); // static function goog.C.f1 = function() { this.f2(); }; // static function goog.C.f2 = function() { alert("hello"); }; goog.sv = 5; goog.C.protoInstance = objThatDelegatesTo(C); goog.C.protoInstance.f3 = function() { C.sv++; // need goog in the lookup chain } goog.C.makeNew = function() { return objThatDelegatesTo(this.protoInstance); }; (function() { var sv = 0; goog.C.protoInstance.f1 = function() { sv++ } goog.C.protoInstance.f2 = function() { sv-- } ... })()