Also mache ich ein Tutorial zu einem der Videos, die ich online gefunden habe. In diesem Tutorial verwendete er IIFE, um mvc-Modell anstelle von Objektliteralen zu erstellen.Eine Funktion innerhalb einer Funktion in einem Objektliteral aufrufen
ich beschlossen, das Projekt mit Objektliterale
Das ist das Problem, das ich jetzt mit bin neu und ich bin nicht sicher, was das Problem ist. Ich vermute, es hat etwas zu tun mit Scoping-Problem.
Dies ist der Code für den Controller und am Ende initiiere ich die init().
var model ={ //Code }
var view = {//Code}
var controller = {
dom: view.getDom(),
setEventHandler: function(){
document.addEventListener("keypress", function(ev){
if(ev.keyCode === 13){
this.addItem();
}
});
},
addItem: function(){
this.updateMethod();
// Code
},
init: function(){
this.setupEventHandler();
},
updateMethod: function(){
// Some code
}
{
controller.init();
Wenn ich jetzt die Enter-Taste drücken um das Ereignis aufzurufen, erhalte ich einen Fehler von der Konsole. Darin heißt es:
"Uncaught Typeerror: this.addItem keine Funktion bei Htmldocument ist [unbekannt]."
Frage: Warum ist es nicht die addItem erkennen()?
Die gleiche Fehlermeldung tritt innerhalb von AddItem() auf, wenn ich versuche, this.updateMethod() auch aufzurufen.
Eine Möglichkeit, wie ich this.addItem() im Ereignis-Listener aufrufen kann, ist die Verwendung von () =>, anstatt eine normale anonyme Funktionsdeklaration zu verwenden.
document.addEventListener("keypress", (ev) => {
if(ev.keyCode === 13){
this.addItem();
{
});
Es gibt mehrere Möglichkeiten: Verweisen auf "Controller" anstelle von "this"; Verwenden von Pfeilfunktionen. –
@ NaïmFavier - Ich habe diesen Sir bearbeitet :) Danke ... – Rayon
Dies ist wirklich nur ein Duplikat von einer der 3 am häufigsten verknüpften Fragen im JavaScript-Tag https://StackOverflow.com/Questions/20279484/How-to- access-the-correct-this-inside-a-callback – charlietfl