Нестатические частные переменные в javascript

Я настраиваю свои объекты javascript следующим образом

Object1 = function() {
  var privateMember = "private value"

  return {
    publicMember: "public value"
    setPrivateMember: function(value) {
       privateMember = value;
    }
  }
}();

Теперь, если я использую прототипное наследование для создания новых объектов

Object2.prototype = Object1

А затем установите частный член

Object2.setPrivateMember("new value");

Затем значение закрытого члена в Объекте 1 также меняется, поэтому он ведет себя больше как статическая переменная. Есть ли способ заставить частные переменные не быть статическими?

PS - Я программист-самоучка, поэтому мое использование терминологии может быть немного схематичным. Дайте мне знать, если это нужно уточнить


person wheresrhys    schedule 14.09.2010    source источник
comment
Следует использовать Object2.prototype = Object1(), или это просто опечатка во вставленном коде?   -  person MooGoo    schedule 14.09.2010
comment
возможный дубликат частных переменных в унаследованных прототипах   -  person TM.    schedule 14.09.2010


Ответы (3)


Правильно, я знал, что раньше я открывал что-то подобное:
Частные переменные в унаследованных прототипах

;oP

person BGerrissen    schedule 14.09.2010
comment
Я знал, что это должно было быть задано раньше, но просто не мог найти правильную фразу для поиска. Спасибо за ответ - person wheresrhys; 14.09.2010

Вы создаете глобальную переменную. Поставьте var перед ним.

var privateMember = "private value";
person Kyle Jones    schedule 14.09.2010
comment
Это была опечатка в моем вопросе. Проблема все еще возникает, даже когда я использую var - person wheresrhys; 14.09.2010

Отредактировал мой ответ, можете ли вы проверить, работает ли это?

Попробуй это -

Object1 = function() {  
  var privateMember = "private value"; 

  var returnVal =  {  
                publicMember: "public value",  
                setPrivateMember: function(value) {  
                privateMember = value;  
                }

           }; 
  return returnVal; 
}(); 
person Sachin Shanbhag    schedule 14.09.2010