3

Я получаю странное поведение с Firefox при изменении переменной и его отображения (live demo here):JS консоль показывает неправильные результаты

var MyModule = (function() { 
    var currentPosition = {x : 1, y : 2, z : 3}; 

    function changePosition() { currentPosition.x = 17; }; 

    return { changePosition : changePosition,  
      currentPosition : currentPosition }; 
})(); 

console.log(MyModule.currentPosition); // 17, 2, 3 instead of 1, 2, 3 !! 
MyModule.changePosition(); 
console.log(MyModule.currentPosition); // 17, 2, 3 

Почему это произошло? (Почему current.Position17 дают, прежде чем он был изменен 17?)

В целом, как получить/установить переменную в откровенном модуль Pattern?


Скриншот с Firefox:

enter image description here

+3

Когда я выполняю вышеуказанный код в консоли, он отображает правильный результат. – A1rPun

+0

не может воспроизвести вашу проблему, код работает как ожидалось - первый вывод (1,2,3) второй - (17,2,3) – Evgeniy

+0

@ A1rPun Добавлен снимок экрана в вопрос (сделанный на Firefox) – Basj

ответ

1

Похоже, Firefox содержит ссылку на объект, и когда вы проверяете его вы видите его состояние изменено в обоих случаях.
В следующий раз вы можете установить точку останова на этой линии и посмотреть там переменные. По моему опыту это более надежно. Когда вы меняете инструкции журнала на регистрацию значения вместо объекта, он будет работать всегда, как ожидалось.

console.log(MyModule.currentPosition.x); 
MyModule.changePosition(); 
console.log(MyModule.currentPosition.x); 

О модульном шаблоне. Вы внедрили его, как это должно быть :)
This - мой источник 1-го шаблона javascript. ->Module pattern

2

Я собираюсь угадать, что вы запустили 3 линии один за другим, и когда вы проверяете первую печатную строку, рядом с ней находится немного i. Chrome сообщит о последних атрибутах объекта, а не о значении их во время печати, поэтому, если вы просто хотите напечатать текущую позицию и не запустите changePosition(), тогда вы увидите 1,2,3.

+0

У меня нет немного 'i' с Firefox. Как я могу доверять консоли JS, если такие вещи случаются? :/ – Basj

+0

О, да, я маленький хром. если вы печатаете примитивы индивидуально, они будут напечатаны, или если вы напечатаете клон объекта, вы получите значение во время priniting – Quince

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

  • Нет связанных вопросов^_^