Ваше утверждение "Хотя я все еще в их поле зрения" неверно.Переменная 'this' всегда задает функциональный контекст, в котором функция выполняется , а не в которой она определена.В этом случае функция внутри setInterval выполняется из области окна, и «this» фактически является окном.
Чтобы обойти эту проблему, я рекомендую использовать замыкание: (обратите внимание на добавление 'переменная self и замена вложенных вызовов this на self 100 *
function Slot(slot, maxSpeed, timer) {
var self = this;
this.slot = slot;
this.speed = 0;
this.maxSpeed = maxSpeed;
this.timer = timer;
this.interval = null;
this.go = function() {
var $slot = $(self.slot);
console.log(self.slot);
$slot.addClass('motion');
$slot.spStart();
self.interval = window.setInterval(function() {
var step = Math.floor(Math.random() * ((self.speed / 100) * 25)) + 1;
if (self.speed < (self.maxSpeed / 2)) {
self.speed += step;
}
if (self.speed >= self.maxSpeed / 2)) {
self.speed -= step;
}
console.log(self.slot);
$slot.spSpeed(self.speed);
}, timer);
};
$(self.slot).pan({ fps: '30', dir: 'down' });
$(self.slot).spStop();
}