Coffeescript和Passport:奇怪的行为,附加功能

时间:2014-11-11 21:43:59

标签: express coffeescript passport.js

我一直在玩coffescript,快递和护照,似乎我并没有真正掌握这种语言的细节。

有人可以向我解释一下,这里发生了什么?

当我初始化passport.serializeUserpassport.deserializeUser这样的函数时:

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

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

一切都按预期工作。

但我想从其他地方传递这些功能。 一旦我执行以下操作,我认为应该完全相同,我得到一个TypeError,告诉我:" TypeError:object不是函数"当护照试图调用我的反序列化功能时。

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

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

passport.serializeUser = serialize
passport.deserializeUser = deserialize

我没有想法。这有什么区别?

1 个答案:

答案 0 :(得分:0)

这些:

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

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

正在调用serializeUser的{​​{1}}和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 的{​​{1}}和passport属性分配新功能。

所以第一个是用函数作为参数调用一些函数,第二个是用其他函数覆盖一些属性(恰好是函数)。