Почему эта циклическая функция в javaScript не возвращает 0 каждый раз? Как бы я сделать что-то подобное в Python? - PullRequest
0 голосов
/ 10 марта 2019

Я новичок в программировании и немного изучаю javaScript, немного изучив Python.Я использую javaScript для управления элементами в мобильном приложении AR, и я создал очень простую функцию Cycler, которая работает именно так, как я хочу, но, честно говоря, я пытаюсь понять ПОЧЕМУ это работает!Я хотел функцию, которая будет цикл 1,2,3 при каждом нажатии.Первое нажатие вернет «1», второе нажатие «2», третье нажатие «3», затем повторите эту последовательность на других нажатиях.Вот что я придумал после множества проб, ошибок и поиска в Google:

const cycler = {
	    current: -1,
	    cycle: function() {
		    if (cycler.current == 3) {
			    cycler.current = 0;
		    } else {
			    cycler.current++;
		    }
		    console.log(cycler.current);
	    }
}

cycler.cycle()
cycler.cycle()
cycler.cycle()
cycler.cycle()
cycler.cycle()

В случае события tap я вызываю cycler.cycle ();и это работает ... возвращая 1,2,3,1,2,3 и т. д.в соответствии с моими нажатиями ... но я не понимаю, почему он не возвращает 0 каждый раз, когда я нажимаю.Почему «current» не сбрасывается в «-1» при каждом вызове?Как бы я сделать что-то подобное в Python?Как я думаю об этом?Спасибо за понимание!

Ответы [ 2 ]

1 голос
/ 10 марта 2019

Ваш cycler является литералом объекта в javascript.У него есть свойство current и метод cycle.Вызов метода не создает объект заново, он просто запускает функцию.
Как известно, функция просто увеличивает значение свойства current (если, конечно, текущее значение не равно 3, конечно, вв этом случае значение сбрасывается до 0.)

В python вы можете создать класс, который создает объект счетчика.Его конструктор будет содержать код, очень похожий на объект, который вы создали здесь.
Если вы продолжаете создавать новые экземпляры из этого класса и вызываете .cycle один раз для каждого экземпляра, ваш журнал будет содержать набор 0 с, как выожидая.
Однако, если вы вызовете .cycle для одного и того же экземпляра несколько раз, вы получите поведение, которое вы нашли здесь.

1 голос
/ 10 марта 2019

Когда объект создается в памяти, он устанавливает начальное текущее значение на -1, и если объект не будет удален и воссоздан в памяти, значение будет таким, каким вы его в последний раз установили.

...