Существует (среди прочего) уловка закрытия:
function obj(x, y) {
var z = 0;
return {
foo: function() { z += x; return z; },
bar: function() { z *= y; return z; }
};
}
o = obj(2, 3);
o.foo();
Этот конкретный подход имеет то преимущество, что он достаточно хорошо скрывает внутреннее состояние.Нелегко (возможно, невозможно, но я не уверен) непреднамеренно повозиться с z прямо снаружи «объекта».