Основываясь на моем понимании javascript, методы прототипа не могут обращаться к переменным, которые являются частными для области конструктора,
 var Foo = function() {
      var myprivate = 'I am private';    
      this.mypublic = 'I am public';
 }
 Foo.prototype = {
     alertPublic: function() { alert(this.mypublic); } // will work
     alertPrivate: function() { alert(myprivate); } // won't work
 }
Это имеет смысл, но существует ли какой-либо путь вокруг этого, что является безопасным и хорошей практикой? Так как использование прототипов обеспечивает преимущество в производительности, поскольку функции-члены распределяются только один раз, я хотел бы получить аналогичную функциональность, сохраняя при этом возможность доступа к своим личным переменным. Я не думаю, что это сработает с использованием прототипа, но есть ли другой шаблон, например метод factory или подход закрытия? Что-то вроде,
var fooFactory = function() {
    var _alertPrivate = function(p) { alert(p); } // bulk of the logic goes here
    return function(args) {
         var foo = {}; 
         var myprivate = args.someVar; 
         foo.mypublic = args.someOtherVar; 
         foo.alertPrivate = function() { _alertPrivate(myprivate); };
         return foo; 
    }; 
}
var makeFoo = new fooFactory();
var foo = makeFoo(args); 
Я не уверен, создается ли новая копия _alertPrivate каждый раз, когда я создаю новый Foo или если есть потенциальная полезность. Цель состоит в том, чтобы получить функциональность, похожую на прототипирование (поскольку она сохраняет память), хотя она все еще может обращаться к закрытым переменным.
Спасибо.