Javascript 覆盖对象引用的值

Javascript 覆盖对象引用的值,javascript,reference,ecma,Javascript,Reference,Ecma,将对象引用作为参数传递给函数时,指定给该引用只会更改引用的对象,而不会更改值,如下所示: class meh { constructor() { this.obj = { member: 7 }; } doSomething() { doFn(this.obj); } doFn(objRef) { objRef = { newMember: 4 } // Doesn't overwrite obj; mer

将对象引用作为参数传递给函数时,指定给该引用只会更改引用的对象,而不会更改值,如下所示:

class meh {
    constructor() {
        this.obj = { member: 7 };
    }

    doSomething() {
        doFn(this.obj);
    }
    doFn(objRef) {
        objRef = { newMember: 4 } // Doesn't overwrite obj; merely assigns a new object to objRef.
    }
}

但是,有没有办法覆盖或以其他方式将值指定给对象引用所指向的实际位置?也就是说,是否有方法将新对象分配给
objRef
(在
doFn
)并在
obj
中反映出来?

这取决于您的情况

以react为例,您可以将变量存储在一个状态中,该状态中有一个用于更新的预构建函数,称为this.setState,但是如果您使用纯javascript,则可以创建自己的全局变量存储,然后直接更新这些变量。我不建议这样做,但作为一个例子,您可以将变量存储在window['somevariable']下,以将它们存储在window对象中,这些变量以后可以被访问

为了让它更有趣,您可以创建预构建函数来完成您可以调用的任务,将变量的参数和要更新的值作为对象传递,然后模拟React的状态特征

Redux再举一个例子,它与一个集中的“存储区”完美地结合在一起,您可以在其中发送数据并从中检索数据,请查看


我希望它能回答您的问题。

不,因为那样会使代码不可靠。任何地方的变量都可能发生变化,甚至超出范围,从而导致神秘的错误。不,这是不可能的,因为有充分的理由。变量指向值,而不是相反的方向。当您说
this.obj=foo
时,this.obj指向
foo
的位置。当您随后说
this.obj=bar
时,您的obj现在只是指向
bar
的位置。赋值不会改变值的任何内容。(顺便说一句,这就是为什么
const
的工作原理)。这也是为什么变量在JS中没有类型-只有值有-变量只是指向一个值,而重新分配只是将指针重新分配到另一个值的位置。这并不能回答问题。重新分配变量永远不会改变原始值。对不起,我不是说他所要求的是可能的。我正在给他一个解决方案,如何去做他想要完成的事情。这很公平。我可能会在您的回答中补充一点,通过重新分配进行修改是不可能的,但是对于Object.assign()或其他类似概念,您可以在保持引用不变的情况下修改/更新原始对象。React是一个非常糟糕的例子,因为状态的不变性是一个核心概念,而这正是OP不想要的。OP希望使用新的/更新的属性对原始对象进行变异,但保持对象引用不变。请随意编辑您的答案,我将很乐意更新投票。