2016-01-17 2 views
0

У меня есть класс машинописи определяется как так:машинописи «это» в переданных функциях

class Foo extends events.EventEmitter { 
    private msg; 

    constructor(){ 
     super(); 
    } 

    public error=(err)=> { 
     debug("got an error",err,this.msg.data); 
    } 


    setup=()=> { 
    this.options = { 
     error: this.error 
    } 
    } 

    run=()=> { 
    let x = require("someothermodule"); 
    x.run(this.options); 
    } 
} 

проблема я получаю, когда «х» называет options.error функции "TypeError: не удается прочитать свойство «данные» неопределенной ", и конечно же, this.data является неопределенными

То, что я хочу знать, как ссылаться на„правильный“это в функции ошибки?

Это результат долгого пути, пытаясь всевозможные варианты, связывание, пытаясь сохранить это в _this;)

бы признателен за любой понимание - новичок машинопись парень (не работает на всех!) , так что, возможно, я что-то действительно очевидное

благодаря

+0

Я не видит какую-либо настройки значения 'msg' полей коды. Как вы ожидаете, что 'this.msg' будет иметь значение, отличное от' undundined ', если вы его никогда не измените? –

+0

Попробуйте связать область действия Foo с методом ошибки при создании объекта options: 'error: this.error.bind (this)'. Я могу уточнить, если вам нужно больше деталей. – FlorianTopf

+0

@MattiasBuelens: извините, это был всего лишь небольшой код «snippet» - поэтому я не исказил весь код. извинения – jmls

ответ

2

отсутствую Поскольку вы применяете варианты с обратным вызовом ошибки, которые обращаются к this в классе Foo вы должны связать эту область при применении этих опций на другую функцию (объем).

Ваша функция настройки должна выглядеть так, чтобы это произошло:

setup =() => { 
    this.options = { 
     error: this.error.bind(this) 
    } 
} 
Смежные вопросы