首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >options = merge({},options)语句

options = merge({},options)语句
EN

Stack Overflow用户
提问于 2014-11-09 22:27:14
回答 2查看 49关注 0票数 0

静态发球 npm库的源代码中,我看到了以下行

代码语言:javascript
运行
复制
 options = merge({}, options)

其中merge函数来自用户-合并库,它的主体如下

代码语言:javascript
运行
复制
exports = module.exports = function(a, b){
  if (a && b) {
    for (var key in b) {
      a[key] = b[key];
    }
  }
  return a;
};

options = merge({}, options)语句的意义是什么,因为它只是将options对象与空对象连接起来?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-09 22:40:03

options = merge({}, options)语句的意义是什么,因为它只是将options对象与空对象连接起来?

才能做到这一点。它将所有属性复制到一个新对象中,在该对象中,即使serveStatic的调用方仍然保存对他传递的options对象的引用,也不能修改它们。

但是,避免调用者干扰对象并不是分离对象的唯一原因。如果我们继续读下去,我们会看到

代码语言:javascript
运行
复制
delete options.setHeaders
options.maxage = options.maxage || options.maxAge || 0
options.root = root

因此,我们还希望避免干扰传递给我们的对象。改变你的论点是反模式的。

票数 1
EN

Stack Overflow用户

发布于 2014-11-09 22:39:19

merge({}, options)创建的新对象具有与源对象相同的属性(因此它是克隆JS对象的最简单方法)。但是,如果不将空对象作为合并函数的目标对象传递,或者跳过这一行,则options对象在serveStatic()函数中的所有更改将影响传递给函数serveStatic()的外部对象。

下面是对JavaScript语言的细微差别的详细解释:https://stackoverflow.com/a/3638034/1806421

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26834051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档