nodejs cookie中间件的源代码中的“this instanceof Cookies”

时间:2013-12-10 02:15:04

标签: 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. “!(这个Cookies的实例)”是做什么的?它检查“这个”是函数本身吗?
  2. 此代码的目的是什么?
  3. 非常感谢!

2 个答案:

答案 0 :(得分:3)

它使new关键字成为可选,并且等效于:

var cookies = new Cookies();

var cookies = Cookies();

在javascript中,如果通过执行instanceofnew 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将是全局对象而不是新实例。