JavaScript setInterval неправильно привязан к правильному закрытию

проблема

Привет люди, я довольно плохо знаком с JavaScript, и я из очень объектно-ориентированного мира Python и Java, это мой отказ от ответственности.

Ниже представлены два фрагмента кода, альтернативные реализации, один на JavaScript, другой на Coffeescript. Я пытаюсь запустить их на сервере в приложении Meteor.js. Проблема, с которой я сталкиваюсь, заключается в том, что при вызове функции «setInterval» с использованием привязанного метода «this.printSomething» в качестве моего обратного вызова, после выполнения этого обратного вызова он теряет область видимости, в результате чего экземпляр «this.bar» становится неопределенным! Может кто-нибудь объяснить мне, почему не работает JavaScript или код coffescript?

Реализация JavaScript
function Foo(bar) {
  this.bar = bar;

  this.start = function () {
    setInterval(this.printSomething, 3000);
  }

  this.printSomething = function() {
    console.log(this.bar);
  }
}

f = new Foo(5);
f.start();
Реализация Coffeescript
class foo
    constructor: (bar) ->
        @bar = bar

    start: () ->
        Meteor.setInterval(@printSomething, 3000)

    printSomething: () ->
        console.log @bar

x = new foo 0
x.start()

Ответы на вопрос(3)

Ваш ответ на вопрос