2015-11-28 7 views
3

Я просто обойдусь с изменением своего кода на ES6, и я натолкнулся на какой-то код, где функция стрелки не работала, и я не уверен, что понимаю почему. Код из плагина для Hapi, чтобы украсить интерфейс reply.ES6 стрелка/эквивалент функции

ES5:

server.decorate('reply', 'test', function(schema, response) { 
    return this.response(mask(schema, response)); 
}); 

ES6:

server.decorate('reply', 'test', (schema, response) => { 
    return this.response(mask(schema, response)); 
}); 

E66 не работает и выдает ошибку:

Uncaught error: this.response is not a function 

Почему это?

+1

Функции стрелок в ES6 автоматически связывают 'this' с внешним пространством, поэтому в этом случае он не эквивалентен. – Seiyria

+1

Я вижу - какая рана была ответом? просто оставьте это как 'function'? – cyberwombat

+3

Да. Вы не можете много сделать, если 'this' для этой конкретной функции привязан к чему-то другому. – Seiyria

ответ

6

В этом конкретном случае библиотека меняет то, что this относится к обратному вызову для decorate. При использовании функций стрелок (=>), this эквивалентен внешнему пространству this. Это означает, что вы в основном застряли, используя для этого function.