我一直在玩coffescript,快递和护照,似乎我并没有真正掌握这种语言的细节。
有人可以向我解释一下,这里发生了什么?
当我初始化passport.serializeUser
和passport.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
我没有想法。这有什么区别?
答案 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
属性分配新功能。
所以第一个是用函数作为参数调用一些函数,第二个是用其他函数覆盖一些属性(恰好是函数)。