nodejs cookie中间件源代码中的“Cookie的这个实例”
我试图通过查看源代码来了解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) ... } ...
- “!(这个Cookies的实例)”是做什么的? 是否检查“this”是函数本身?
- 这个代码的目的是什么?
非常感谢!
它使new
关键字可选和这些等效:
var cookies = new Cookies(); var cookies = Cookies();
在javascript中,如果对象是通过执行new F()
(或new G()
,其中G
在F
的原型链中)构造的,则对象将是函数F的instanceof
。
当调用new F()
,函数F
被调用,并且在函数体内, this
指的是一个新的对象,它是F
一个实例。 但是,如果您只需调用F
如F()
,则将其设置为全局对象(浏览器中的window
和node.js中的global
)。
有问题的线路正在进行testing,以查看是否使用new
关键字(如new Cookies(...)
调用Cookies
函数,在这种情况下, this
将是一个对象,该对象是Cookies
一个实例, Cookies
this instanceof Cookies
将评估为true
),或者它是否被调用(例如Cookies(...)
,在这种情况下, this
将是一些不是Cookies
实例的对象)。 在第二种情况下,函数被调用new
并返回。
这可以让API的使用者调用带有或不带有new
关键字的Cookies
,并仍然获取作为Cookies
实例的对象。 没有这个检查,调用没有new
Cookies
将导致意想不到的结果。
另请参阅:
这使您可以使用或不使用new
关键字来创buildCookie的实例。 this
是指实例。 如果你调用的函数没有new
关键字, this
将是全局对象,而不是一个新的实例。