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