我试图通过查看源代码来了解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()Gprototype chain中)构造了该对象,则该对象将是函数F的F

当您调用new F()时,将调用函数F,并且在函数体内,this引用作为F实例的新对象。但是,如果像F那样简单地调用F(),则将this设置为全局对象(浏览器中为window,node.js中为global)。

有问题的行正在测试以查看是否使用Cookies关键字调用了功能new(例如new Cookies(...),在这种情况下,this将是Cookiesthis instanceof Cookies的实例的对象)将评估为true),或者是否不经调用(例如Cookies(...),在这种情况下,this将是不是Cookies实例的某个对象)。在第二种情况下,该函数用new调用并返回。

这使API的使用者可以使用或不使用Cookies关键字来调用new,并且仍然可以得到作为Cookies实例的对象。如果没有此检查,则调用不带Cookiesnew会导致意外结果。

另请参阅:


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/

10-11 09:18
查看更多