2016-01-27 7 views
5

Jestem nowa w składni ES6, mój oryginalny kod ma więcej implementacji, ale ja uprościliśmy. Otrzymuję komunikat o błędzie z informacją, że nie można odczytać właściwości "Method2" niezdefiniowanej. Co ja tu robię źle? Czy muszę wykonywać połączenia bind?ES6 wywołaj jedną metodę z innej

class Class1 { 
    constructor() {  
    eventbus.subscribe(this.Method1); 
    } 

    Method1() { 
    this.Method2(); 
    } 

    Method2(){  
    } 
} 
+1

Proszę pokazać wszystkie z odpowiednim kodem. W JavaScript najważniejsze rzeczy dzieją się w * czasie połączenia *, więc pokaż aktualne połączenie z '.Method1()' i trochę kodu otaczającego go. –

+0

Powiedz nam też, jak to działa. Na przykład z Babel? – anolsi

+0

Jak się nazywasz 'Metoda1'? Konteksty wywoływania JavaScriptu są dość dziwne: http://codepen.io/vinhnghi223/pen/ghpvt –

Odpowiedz

2

Trzeba zrobić eventbus.subscribe(this.Method1.bind(this));

Ponieważ jesteś kojarzenie metody, aby uruchomić na innym miejscu, będziesz na pewno pod jakim zakresem będzie działać. Wymuszenie powiązania spowoduje, że zostanie użyte wystąpienie Class1.

EDIT: Ponieważ ES6 umożliwiają funkcje strzałek można też zrobić eventbus.subscribe(() => this.Method1());, jak to było sędziował przez @torazaburo

+2

Osobiście wolałbym 'eventbus.subscribe (() => this.Method1())' teraz, gdy mamy funkcje strzałek –

+0

Tak, masz rację.To też będzie działać. dited mój odpowiadający – anolsi

2

nie może odczytać własności „Method2” o nieokreślonej

Najprawdopodobniej nie stwarzają żadnego obiektu tej samej klasy lub mogą być brakuje słowa kluczowego new aby utworzyć nowy obiekt.

var cls = Class1(); // will throw error. 

cls.Method1(); 

co mam na myśli, jeśli nie:

var cls = new Class1(); 

cls.Method1(); // will get executed. 

es6fiddle demo.

+0

Bezpośrednie wywołanie jest w porządku, ale na oddzwonienie traci na tym zakresie Zobacz moje edycje – anivas

+0

@anivas zobacz moją odpowiedź. Myślę, że twój problem polega na tym, jak pozwalasz na wywołanie subskrybenta Twoja metoda: – anolsi

Powiązane problemy