【问题标题】:Return Object by value in Javascript在Javascript中按值返回对象
【发布时间】:2016-03-09 02:37:44
【问题描述】:

我知道 Javascript 中的对象是通过引用传递的,但是有没有办法将对象作为值返回。

当多次调用 decodePermissions() 时,它们总是共享同一个对象。所以我的问题是,有没有办法为每个调用创建对象?

function decodePermissions(table, group) {
    return {
            add: canPerformAction(table, group, ACTION.ADD),
            edit: canPerformAction(table, group, ACTION.EDIT),
            delete: canPerformAction(table, group, ACTION.DELETE)
        }
}

【问题讨论】:

  • 你的return语句每次都要创建一个对象,所以这里就不分享了。真正的问题是什么?
  • 为什么不直接将共享对象传递给函数并在函数内部返回呢?

标签: javascript object pass-by-reference creation


【解决方案1】:

我假设每次函数 decodePermissions(table, group).add(table, group, ACTION.ADD);被调用,你想创建一个新的对象。

我不确定这是否是您要查找的内容,但我在下面的 jsbin 链接中附上了一个基本示例

https://jsbin.com/jofikudite/edit?html,js,console,output

每次调用 objCreator.createNewObject(param) 时,它都会创建一个全新的对象,该对象不会以任何方式链接到通过此函数创建的其他对象。

【讨论】:

  • 我的荣幸。很高兴有帮助:)。
【解决方案2】:

不,您可以深度复制对象并返回该新对象

function returnObj( obj )
{
  return JSON.parse( JSON.stringify( obj ) );
}

【讨论】:

  • 它不是深度复制,它只是将对象更改为 JSON,然后将其更改回 Object,您只是在这里丢失了对内存中对象的引用;)
  • @Alex 相当于深拷贝而且更干净,不是吗?问题是什么??这种投票非常令人恼火
  • 我对你投了反对票……而且是的:) 可能有人对你投了反对票,因为你在堆栈上回答了 x*N 个答案的问题,我肯定对你投了反对票;p\
  • @Alex 对不起,我不是故意这样喊的,但是从昨天开始就看到这种警务了,我失去了冷静。仍然想了解它是如何没有回答问题的
猜你喜欢
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 2012-12-10
相关资源
最近更新 更多