Javascript中按值返回对象

Javascript中按值返回对象,javascript,object,pass-by-reference,creation,Javascript,Object,Pass By Reference,Creation,我知道Javascript中的对象是通过引用传递的,但有没有办法将对象作为值返回 当多次调用decodePermissions()时,它们总是共享同一个对象。所以我的问题是,有没有办法为每个调用创建对象 function decodePermissions(table, group) { return { add: canPerformAction(table, group, ACTION.ADD), edit: canPerformAct

我知道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)
        }
}

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

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

我假设每次函数都会对权限(table,group.add)(table,group,ACTION.add)进行解码;如果调用,则要创建一个新对象

我不确定这是否是您想要的,但我在下面的jsbin链接上附加了一个基本示例


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

您的
return
语句每次都应该创建一个对象,因此此处不共享。实际的问题是什么?为什么不将共享的对象传递给函数并在函数内部返回它呢?这不是深度复制,它只是将对象更改为JSON,然后将其更改回对象,您只是在这里丢失了对内存中对象的引用;)@亚历克斯:这相当于深度复制,而且更干净,不是吗?有什么问题吗??这次否决票是非常令人恼火的。我没有投你的反对票。。。你们是:)可能有人投了你们的反对票,因为你们回答的问题是x*N在堆栈上的答案,我肯定投了你们的反对票;对不起,我不是故意这样喊的,但是从昨天开始我就看到了这样的警察,我失去了冷静。我仍然想知道它怎么没有回答这个问题,我很乐意。很高兴这有帮助:)。