我试图通过查看源代码来了解 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)
...
} ...
- “!(this instanceof Cookies)”是做什么的?它是否检查“this”是函数本身?
- 这段代码的目的是什么?
非常感谢!
最佳答案
它使 new
可选关键字和这些等价物:
var cookies = new Cookies();
var cookies = Cookies();
在 javascript 中,一个对象将是 instanceof
如果对象是通过执行 new F()
构造的,则函数 F 的(或 new G()
,其中 G
在 F
的 prototype chain 中)。
当您调用 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
会导致意想不到的结果。
另见:
关于javascript - nodejs cookie中间件源代码中的"this instanceof Cookies",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20484798/