Coffeescript и Passport: странное поведение, прикрепление функций

Я играл с coffescript, экспресс и паспортом, и, похоже, я не совсем понял некоторые детали языка.

Может кто-нибудь объяснить мне, что здесь происходит?

Когда я инициализирую passport.serializeUser а также passport.deserializeUser функции как это:

passport.serializeUser (user, done)->
  done null, user

passport.deserializeUser (obj, done)->
  done null, obj

все работает как положено.

Но я хочу передать эти функции из другого места. Как только я делаю следующее, что, на мой взгляд, должно быть точно так же, я получаю TypeError, говорящую мне, что: "TypeError: объект не является функцией", когда passport пытается вызвать мою функцию десериализации.

serialize = (user, done) ->
  done null, user

deserialize = (obj,  done) ->
  done null, obj

passport.serializeUser = serialize
passport.deserializeUser = deserialize

У меня нет идей. Какая здесь разница?

1 ответ

Решение

Эти:

passport.serializeUser (user, done)->
  done null, user

passport.deserializeUser (obj, done)->
  done null, obj

звонят serializeUser а также deserializeUser методы passport и передавая их функции в качестве аргументов. Они такие же как:

s = (user, done) -> done(null, user)
passport.serializeUser(s)

d = (obj, done) -> done(null, obj)
passport.deserializeUser(d)

Эти:

serialize = (user, done) -> done null, user
passport.serializeUser = serialize

deserialize = (obj,  done) -> done null, obj
passport.deserializeUser = deserialize

назначают новые функции passport"s serializeUser а также deserializeUser свойства.

Таким образом, первая вызывает некоторые функции с функциями в качестве аргументов, а вторая - перезаписывает некоторые свойства (которые являются функциями) другими функциями.

Другие вопросы по тегам