javascript - nodejs cookie中间件源代码中的"this instanceof Cookies"

标签 javascript node.js cookies express

我试图通过查看源代码来了解 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)

 ...
} ...
  1. “!(this instanceof Cookies)”是做什么的?它是否检查“this”是函数本身?
  2. 这段代码的目的是什么?

非常感谢!

最佳答案

它使 new可选关键字和这些等价物:

var cookies = new Cookies();

var cookies = Cookies();

在 javascript 中,一个对象将是 instanceof如果对象是通过执行 new F() 构造的,则函数 F 的(或 new G(),其中 GFprototype 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/

相关文章:

cookies - 某些顶级域(例如 amazonaws.com)是否被阻止/阻止用作 Cookie 域?

php - Cookie 存在于浏览器中,但 php $_COOKIE 为空

javascript - 为什么在参数传递期间不计算 JavaScript 哈希对象?

javascript - Console.log() 在 Q 中打印 Promise 对象的状态和值

Javascript 在本地存储中保存和检索数组数据

javascript - 如何在 Keycloak 中预先填写注册字段? (keycloak中是否有一个叫做 "register_hint"的东西?)

node.js - ERR_CONTENT_DECODING_FAILED nginx Reactjs Node.js

java - 在 Spring Webflux 中添加的多个 cookie 未合并到单个 HTTP header 中

javascript - 在数组中预加载图像(并等待它们下载)

javascript - console.timeEnd ("start")不工作