2017-10-19 5 views
0

Hoffentlich ist dies eine einfache Antwort. Ich versuche, eine Methode innerhalb meines Objekts aufzurufen, die Konsole gibt jedoch einen Fehler, dass die Funktion keine Funktion ist.Interne Funktionen innerhalb des Objekts aufrufen

function tabs(el, data){ 
    this.el = el; 

    this.addTab = function(data){ 
     console.log("addTab", this.el, data); 
    }; 

    data.forEach(function(data){ 
     this.addTab(data); 
    }); 
} 

Ich rufe meine Aufgabe zunächst wie so:

var t = new tabs("tabs", []); 

Mein Fehler ist, dass addTab keine Funktion ist.

Antwort

1

Jede Funktion hat ihren eigenen Kontext, auf den sich this bezieht. Der Kontext der Funktion, die Sie an die forEach übergeben haben, bezieht sich nicht auf das Objekt selbst. Sie müssen also den Kontext Ihrer Funktion beibehalten, um auf das aktuelle Objekt zu verweisen. Ändern Sie die Funktionsdeklaration mit arrow function, um den äußeren Kontext zu erhalten.

function tabs(el, data){ 
    this.el = el; 

    this.addTab = function(data){ 
     console.log("addTab", this.el, data); 
    }; 

    data.forEach((data) => { 
     this.addTab(data); 
    }); 
} 
+0

Eine Erklärung für * warum *, die einen Unterschied macht, würde dies zu einer besseren Antwort machen. – Quentin

+0

Danke dafür. Mir waren die zusätzlichen Funktionen der Pfeilfunktionen nicht bekannt. Ich frage mich aber, warum die Verwendung von addTab (und nicht this.addTab) aus dem ursprünglichen Code auch nicht funktioniert? –

+0

Weil 'addTab' an das aktuelle Objekt gebunden ist. Also müssen Sie dieses Objekt finden, als rufen Sie 'addTab' daraus –

Verwandte Themen