Я пишу простой Twitter-клиент для игры с coffeescript.У меня есть объектный литерал с некоторыми функциями, которые вызывают друг друга с помощью обратных вызовов.
somebject =
foo: 'bar'
authenticateAndGetTweets: ->
console.log "Authorizing using oauth"
oauth = ChromeExOAuth.initBackgroundPage(this.oauthdetails)
oauth.authorize( this.afterLogin.call this )
afterLogin: ->
this.getTweets(this.pollinterval)
Этот код отлично работает. Редактировать: на самом деле this.afterlogin должен быть отправлен как обратный вызов выше, а не сразу, как Тревор заметил ниже.
Если в authenticateAndGetTweets я удалил 'call' и просто запустил:
oauth.authorize( this.afterLogin )
и не использовал 'call', я получил бы следующую ошибку:
Uncaught TypeError: Object [object DOMWindow] has no method 'getTweets
Что имеет смысл, поскольку «this» в afterLogin связано с тем, что инициировало обратный вызов, а не с «someobject» литералом моего объекта.
Мне было интересно, есть ли какая-нибудь магия в Coffeescript, которую я мог бы делать вместо 'call'.Первоначально я думал использовать '=>', но код выдаст ту же ошибку, что и выше, если используется '=>'.
Так есть ли способ избежать вызова?Или coffeescript не устраняет необходимость в этом?Что заставило '=>' работать не так, как я ожидал?
Спасибо.Я до сих пор наслаждаюсь coffeescript и хочу быть уверенным, что делаю все «правильно».