Введение в ООП

Используй просто свойство в функции. Прототипы идиоматически нужны только для наследования и описания классов.

Не правильно. Это как набивание меча на ноге: интересное упражнение но во время матча никто таким не занимается.

Вот это хороший вопрос. Это должно быть нечто что

  1. Функция (потому что это нужно мочь продолжить вызывать)
  2. Эта функция должна знать про предыдущие вызовы (можно в magic конструкировать функцию (f1), возвращать ее (f1), а при последующих ее (f1) вызовах возвращать ее (f1) саму.
  3. magic() == 0; // true фишка сравнения (обрати внимание что оно нестрогое) в том что если с разных сторон неравенства стоят несовместимые типы, то интерпретатор пытается привести типы. Один из подкапотных шагов который он делает - вызов метода valueOf у несоответствующего типа. Мы уже определили что результат magic - должна быть функция. Если ей сделать метод valueOf который возвращает число, то он будет вызываться при нестрогом сравнении и поведение сравнении будет таким как ожидается.