@ Чад уже нашел ответ, но вот объяснение.
Если вы вызываете функцию следующим образом:
AS.popElement();
, функция popElement запускается в контексте объекта AS(что означает «это» относится к AS).Но если вы используете setInterval (или любую функцию в стиле обратного вызова) следующим образом:
setInterval(AS.popElement, 1000);
, вы только передаете ссылку на функцию popElement.Поэтому, когда popElement выполняется через 1000 миллисекунд, он выполняется в глобальном контексте (что означает «это» относится к окну).Вы бы получили ту же ошибку, если бы позвонили:
window.popElement();
Возможная альтернатива, позволяющая избежать этого, заключается в следующем:
setInterval(function() { return AS.popElement() }, 1000);
Другим вариантом может быть использование apply или callметоды для явного задания контекста:
setInterval(AS.popElement.apply(AS), 1000);