Problem:keine Funktion Typeerror beim Aufruf von Objektmethode in Javascript
Wenn ich versuche, eine Objektmethode in dieser besonderen Art und Weise in JavaScript zu nennen, erhalte ich folgende Fehlermeldung:
TypeError: listener.update is not a function
Mein Code:
<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>
Erklärung des Codes:
Die Model
Objekt verwaltet eine Liste von listeners
und fordert ihre update
Methode, wenn einige Zustand geändert hat. In meinem Beispiel passiert das, wenn setSelection
aufgerufen wird.
Hinweis:
Der Fehler ist nicht sehr aufschlussreich, und wenn ich die letzte Zeile Kommentar-, listnr.update
funktioniert gut.
Frage:
Warum erhalte ich diese Fehlermeldung, wenn das Verfahren aus dem Modell genannt wird, und/oder wie kann ich lösen dieses Problem?
Bitte verwenden Sie einen Debugger, bevor Sie zu SO gehen –
Wie so? Was würde ich mit einem Debugger herausfinden? Und was ist SO? : p – Sebi
Sie könnten Ihr Listener-Objekt überprüfen und sehen, was es ist update -Eigenschaft ... –