Я думал, что начинаю понимать JavaScript довольно хорошо, но явно нет. Позвольте мне объяснить мою проблему на примере. Во-первых у меня есть следующие модуль определены:Создание нескольких экземпляров модуля
var Test = function() {
var counter = 0;
function init() {
alert(counter);
}
return {
counter: counter,
init: init
}
};
Я затем создать 2 экземпляра:
var test1 = new Test();
var test2 = new Test();
Теперь я обновить переменную счетчика (как это публичное) и сделать несколько предупреждений. Все идет нормально.
alert(test1.counter); // Alerts 0
test1.counter = 5;
alert(test2.counter); // Alerts 0
test2.counter = 10;
alert(test1.counter); // Alerts 5
Теперь я, наконец, сказать следующее:
test1.init(); // Alerts 0
test2.init(); // Alerts 0
Это немного не понимаю. Почему это предупреждение 0? Я думал, что первое предупреждение будет 5, а второе 10.
Я был бы признателен, если бы кто-нибудь мог объяснить, как это работает, или указать мне в правильном направлении. Благодаря
Скалярное набраны переменные передаются по значению, а не по ссылке. Итак, 'return {counter: counter, ...}' просто копирует текущее значение 'var counter' и меняет' this.counter', не влияет на 'var counter'. –