2017-09-06 1 views
0

Ich habe eine kleine Bibliothek mit wenigen Klassen. In einer der Klassen verwende ich Methoden aus anderen Klassen, also instanziiere ich sie und verwende sie im Code.TypeError: _this2.function ist keine Funktion

Einige der Klassen, die ich Referenzmethode mit dem this Schlüsselwort verwenden.

Beispiel:

// index.js 
import Class1 from './class1' 
import Class2 from './class2' 
import Class3 from './class3' 

export { 
    Class1, 
    Class2, 
    Class3 
} 

// class1.js 
export default Class1 { 
    func1() { 
     return 'something'; 
    } 

    func2() { 
     return this.func1() + 'else'; 
    } 

} 

// class2.js 
export default Class2 { 
    func1() { 
     return 'something'; 
    } 

    func2() { 
     return this.func1() + 'else again'; 
    } 

} 

// class3.js 

import {Class1, Class2} from './index'; 
const c1 = new Class1(); 
const c2 = new Class2(); 

export default Class3 { 
    funcNotWorking(){ 
     return c1.func2() + c2.func3() + 'this does not work' 
    } 

} 

ich dies nur in Tests bin mit dem Import:

// test.js 
const c3 = require('library.js').Class3 

// test stuff calling: 
c3.funcNotWorking() 

ich dies mit webpack und babel loader bin kompilieren. Diese Konfiguration scheint zu funktionieren, wie es kompiliert und alles andere funktioniert, aber das ...

Ich habe gelesen, dass die Leute Probleme mit React haben, aber das ist nur Es6. Könnte mir jemand zeigen, wie ich das lösen kann?

+0

Standard Class2 in der Datei class3.js exportieren, sind Sie sicher, dass dies das ist, was Sie wollen? –

+0

@ ŁukaszKapica Sie haben Recht. Tippfehler, aber das ist ein Beispiel, um das Problem zu erklären – Samuel

+0

Warum haben Sie nicht eine neue Instanz einer Class3 erstellt, genau wie bei Class1 und Class2? –

Antwort

0

Der Kontext ist davon in meinem Code verloren geht.

Ich verwende Rekursion, Mapping und Pfeil-Funktion in dem Code, der Probleme hatte. Die Babel kompilierte Version _this2 folgte nicht dem Kontext.

Ich extrahierte einige Methoden, ordnete sie im Klassenkonstruktor und verwenden Sie in der Klasse die extrahierte Methode und es kompiliert korrekt.

Verwandte Themen