2016-01-27 6 views
5

Я новичок в синтаксисе ES6, у моего исходного кода больше реализации, но я упростил. Я получаю сообщение об ошибке, не могу прочитать свойство «Метод2» неопределенного. Что я здесь делаю неправильно? Нужно ли мне делать какие-либо вызовы связывания.ES6 вызов одного метода от другого

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

    Method1() { 
    this.Method2(); 
    } 

    Method2(){  
    } 
} 
+1

Пожалуйста показать все соответствующий код. В JavaScript наиболее важные вещи происходят в * время вызова *, поэтому покажите фактический вызов '.Method1()' и некоторый код, окружающий его. –

+0

Расскажите нам, как вы это используете. Например, с Вавилоном? – anolsi

+0

Как вы называете 'Method1'? JavaScript-контексты вызова довольно странные: http://codepen.io/vinhnghi223/pen/ghpvt –

ответ

2

Вам нужно сделать eventbus.subscribe(this.Method1.bind(this));

Поскольку вы общаетесь метод для запуска на другом месте, вы будете в соответствии с которым он будет работать. Принудительное связывание с этим будет гарантировать, что это пример Class1, который будет использоваться.

EDIT: С ES6 позволяют стрелки функции вы также можете сделать eventbus.subscribe(() => this.Method1());, как это было судили @torazaburo

+2

Лично я бы предпочел 'eventbus.subscribe (() => this.Method1())' теперь, когда у нас есть функции стрелок. –

+0

Да, вы правы, он также будет работать. подвел мой answser – anolsi

2

не может прочитать свойство «method2» неопределенной

Скорее всего, вы не создаете какой-либо объект того же класса или может быть, вам не хватает new ключевое слово, чтобы создать новый объект.

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

cls.Method1(); 

Что я имел в виду, если вы:

var cls = new Class1(); 

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

es6fiddle demo.

+0

Прямой вызов прекрасен, но при обратном вызове он теряет область действия. См. мои правки. – anivas

+0

@anivas см. мой ответ. Я думаю, что ваша проблема заключается в том, как вы позволяете абоненту звонить ваш метод. – anolsi

Смежные вопросы