Что вы можете сделать, это использовать локальные переменные в функции-конструкторе (инициализировать) для прототипа, а затем создать замыкание, которое будет обращаться к этой переменной и предоставлять ее вашим открытым методам.
Вот пример кода:
// properties are directly passed to `create` method
var Person = Class.create({
initialize: function(name) {
// Protected variables
var _myProtectedMember = 'just a test';
this.getProtectedMember = function() {
return _myProtectedMember;
}
this.name = name;
},
say: function(message) {
return this.name + ': ' + message + this.getProtectedMember();
}
});
Вот теория Дугласа Крокфорда по этому вопросу.
http://www.crockford.com/javascript/private.html