2010-09-14 3 views
2

Я настраиваю мои 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 также изменяется, поэтому оно ведет себя скорее как sta tic variable. Есть ли способ заставить частные переменные не быть статическими?

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

+1

следует использовать 'Object2.prototype = Object1()' или это только опечатка в вставленном коде? – MooGoo

+0

Возможный дубликат [Частные переменные в унаследованных прототипах] (http://stackoverflow.com/questions/3617139/private-variables-in-inherited-prototypes) –

ответ

3

Righto, знал, что я awnsered что-то вроде этого раньше:
Private variables in inherited prototypes

, ОЦ

+0

Я знал, что ее нужно было спросить раньше, но просто не смогли найти нужную фразу для поиска. Приветствия за ответ – wheresrhys

2

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

var privateMember = "private value";
+1

Это была опечатка в моем вопросе. Проблема все еще происходит, даже когда я использую var – wheresrhys

2

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

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

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

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

      }; 
    return returnVal; 
}(); 
Смежные вопросы