Проблема:не функция TypeError при вызове метода объекта в Javascript
Когда я пытаюсь вызвать метод объекта в данном конкретном пути в JavaScript, я получаю следующее сообщение об ошибке:
TypeError: listener.update is not a function
Мой код:
<html>
<head>
<script src="library.js"></script>
</head>
<body>
<script>
// manages listeners etc.
function Model() {
var listeners = [];
this.addListener = function(listener) {
listeners.push(listener);
};
// the model will call the listeners when "setting the selection"
this.setSelection = function() {
for (listener in listeners)
listener.update();
};
};
// test function that will be used as update
function moveon() {
var answer = confirm("Ready to move on?");
if (answer) window.location = "http://google.com";
}
// create a model and add a listener
var model = new Model();
var listnr = {};
listnr.update = moveon;
model.addListener(listnr);
// update listener
setTimeout(model.setSelection, 2000); // this doesn't work
// setTimeout(listnr.update, 2000); // but this does
</script>
</body>
</html>
Объяснение кода:
Model
объект управляет списком listeners
, и называет свой метод update
когда некоторое состояние изменилось. В моем примере это происходит, когда вызывается setSelection
.
Примечание:
ошибка не очень проницательны, и, если я раскомментировать последнюю строчку, listnr.update
отлично работает.
Вопрос:
Почему я получаю эту ошибку, когда вызывается метод из модели и/или как я могу решить эту проблему?
Пожалуйста, используйте отладчик перед тем, как добраться до SO –
Как это сделать? Что еще я могу выяснить с помощью отладчика? И что такое? : p – Sebi
вы можете проверить свой объект-слушатель и посмотреть, что это свойство обновления ... –