我试图通过查看源代码来了解cookie中间件的工作原理。这个中间件将取代已弃用的cookieParser()。 https://github.com/jed/cookies/blob/master/lib/cookies.js
在解释第一句话时需要一些帮助:
...
function Cookies(request, response, keys) {
if (!(this instanceof Cookies)) return new Cookies(request, response, keys)
...
} ...
非常感谢!
答案 0 :(得分:3)
它使new
关键字成为可选,并且等效于:
var cookies = new Cookies();
var cookies = Cookies();
在javascript中,如果通过执行instanceof
(new F()
new G()
G
来构建对象,则对象将是函数F的F
new F()
} F
)。
当您调用this
时,将调用函数F
,并且在函数体内,F
引用作为F()
实例的新对象。但是,如果只调用this
window
,则global
设置为全局对象(浏览器中为Cookies
,node.js中为new
)
有问题的行正在测试是否使用new Cookies(...)
关键字调用了函数this
(例如Cookies
,在这种情况下this instanceof Cookies
将是一个对象是true
的实例,Cookies(...)
将评估为this
),或者是否在没有Cookies
的情况下调用它,在这种情况下new
将是一些不是Cookies
的实例的对象。在第二种情况下,使用new
调用该函数并返回。
这允许API的使用者使用或不使用Cookies
关键字调用Cookies
,并且仍然可以获得作为new
实例的对象。如果没有此检查,则在没有{{1}}的情况下调用{{1}}会导致意外结果。
答案 1 :(得分:1)
这允许您创建包含或不包含new
关键字的Cookie实例。 this
指的是实例。如果您在没有new
关键字的情况下调用该函数,this
将是全局对象而不是新实例。