2013-08-02 7 views
0

Рассмотрим следующий фрагмент кода:Частная переменная, доступная в функции-прототипе node.js?

function C1() { 
    // private variable in the constructor 
    a = 1; 
} 

C1.prototype.f1 = function() { 
console.log("a=" + a); 
} 

C1.prototype.f2 = function() { 
    a = 2; 
    process.nextTick(this.f1); 
} 

o = new C1(); 
o.f1(); 
o.f2(); 

Выход наблюдаемый:

a=1 
a=2 

Я думал, частные переменные недоступны за пределами функции конструктора?

+0

Вы должны [объявить переменную] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var) - 'var a = 1;'. Просто настройка может создать глобальный характер. http://stackoverflow.com/q/1470488 –

ответ

1

В JavaScript переменная, объявленная без ключевого слова "var", имеет глобальную область видимости. В браузере это достигается путем присоединения переменной к объекту окна (не уверен, как она работает в узле). Если вы хотите, чтобы для вашего объекта была доступна приватная переменная, попробуйте закрыть вокруг объекта конструктор и объявление прототипа.

Смежные вопросы