2017-05-24 2 views
0

Ich bin neu in ES6 und Refactoring-Code, um die Vererbung zu verwenden, aber ich bin auf diesen Fehler gestoßen, den ich nicht verstehe.JavaScript Es6 Class 'erweitert' verliert abstrakte Klassenmethoden

Bitte kann mir jemand helfen, dies zu erklären, kann das Kind Klasse nicht die Methoden des übergeordneten Klasse zugreifen, wenn zu einem Array hinzugefügt:

class abstract1 { 
    constructor(){ 
    } 

    method1_2(){ 
     console.log('method1_2'); 
    } 

    method1_1(){ 
     console.log('method1_1'); 
     this.method1_2(); 
    } 
} 

class test extends abstract1{ 
    constructor(){ 
     super(); 
    } 

    method2_1(){ 
     console.log('method2_1'); 
     this.method1_1(); 
    } 
} 
let tmp = new test(); 
tmp.method2_1(); 

//All good with world, result: 
// method2_1 
// method1_1 
// method1_2 

console.log('Now Run from a callback'); 
let eventActions = []; 
eventActions.push({test:tmp.method2_1}); 
eventActions[0].test(); 

//Not good with world: 
// method2_1 
// Uncaught TypeError: this.method1_1 is not a function 
// at Object.method2_1 [as test] (<anonymous>:22:8) 
// at <anonymous>:35:17 
+2

Dies hat nichts mit ES6, Klassen oder Vererbung zu tun haben. Eine Methode, die einem Array auf die Art und Weise hinzugefügt wird, wie Sie es getan haben, kann nicht einmal auf "eigene" Methoden zugreifen. Probiere 'console.log (this)' aus. – Bergi

+0

Danke @Bergi, das hat mir geholfen, die Dinge besser zu verstehen. – ajc

Antwort

0

Sie einen Anruf an bind fehlt:

eventActions.push({test:tmp.method2_1.bind(tmp)}); 
+0

Danke @Paulpro – ajc

Verwandte Themen