我试图通过查看源代码来了解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)
...
} ...
“!(此cookie实例)”是做什么的?是否在检查“ this”是否为函数本身?
该代码的目的是什么?
非常感谢!
最佳答案
它使new
关键字成为可选关键字,并具有以下等效功能:
var cookies = new Cookies();
var cookies = Cookies();
在javascript中,如果通过执行
instanceof
(或new F()
其中new G()
在G
的prototype chain中)构造了该对象,则该对象将是函数F的F
。当您调用
new F()
时,将调用函数F
,并且在函数体内,this
引用作为F
实例的新对象。但是,如果像F
那样简单地调用F()
,则将this
设置为全局对象(浏览器中为window
,node.js中为global
)。有问题的行正在测试以查看是否使用
Cookies
关键字调用了功能new
(例如new Cookies(...)
,在这种情况下,this
将是Cookies
和this instanceof Cookies
的实例的对象)将评估为true
),或者是否不经调用(例如Cookies(...)
,在这种情况下,this
将是不是Cookies
实例的某个对象)。在第二种情况下,该函数用new
调用并返回。这使API的使用者可以使用或不使用
Cookies
关键字来调用new
,并且仍然可以得到作为Cookies
实例的对象。如果没有此检查,则调用不带Cookies
的new
会导致意外结果。另请参阅:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof
https://stackoverflow.com/a/383503/711902
关于javascript - nodejs cookie中间件源代码中的“this instanceof Cookies”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20484798/