[英]Sense of options = merge({}, options) statement
在serve-static npm库的源代码中,我看到了以下行
options = merge({}, options)
merge
功能来自utils-merge库,它具有以下主体
exports = module.exports = function(a, b){
if (a && b) {
for (var key in b) {
a[key] = b[key];
}
}
return a;
};
options = merge({}, options)
语句的含义是什么options = merge({}, options)
因为它只是将options
对象与一个空对象连接在一起?
merge({}, options)
创建一个与源对象具有相同属性的新对象(因此这是克隆JS对象的最简单方法)。 但是,如果您不传递空对象作为合并函数的目标对象,或者只是跳过此行,则serveStatic()
函数内部的options
对象上的所有更改都会影响传递给函数serveStatic()
外部对象。
这是对此JavaScript语言细微差别的详细说明: https : //stackoverflow.com/a/3638034/1806421
options = merge({}, options)
语句的含义是什么options = merge({}, options)
因为它只是将options
对象与一个空对象连接在一起?
要做到这一点。 它将所有属性复制到一个新对象中,即使serveStatic
的调用者仍然持有对其传递的options
对象的引用,也无法在此处对其进行修改。
但是,避免调用者弄乱对象不是分离对象的唯一原因。 如果继续阅读,我们会看到类似
delete options.setHeaders
options.maxage = options.maxage || options.maxAge || 0
options.root = root
因此我们也要避免弄乱传递给我们的对象。 改变您的论点是一种反模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.