有趣的是,这与另一个最近的问题非常相似,尽管不是很愚蠢。
设置一个数据结构,试图在不同的组件中使用这样的引用来处理这个数据结构是一条黑暗的道路。如果你只是在讨论一些代码,这很有趣,但是在一个已部署的应用程序中,这很麻烦。
您最好创建一个结构,在该结构中,组件进行更改并将模型更改写入该模型,然后模型广播“脏数据”事件(或任何您想调用它的内容)包含注册侦听器(例如其他组件)正在侦听的新数据。他们收到数据有效载荷并使用它。
对于希望按需提供数据的组件,您可以注入服务/访问单例/您的框架执行的任何操作,并通过getter或某种简单工厂函数访问它。
您正在做的事情越来越多地让对象发生变化。传递有问题的对象的不可变(或至少是复制的)版本更好。这样,如果该对象发生变化,很容易找出在哪里以及为什么。如果所有事情都有实际的参考(正如你上面看到的那样,通常不会),对他们中的任何一个人的小改变都可能破坏你的早晨。
复制对象,如果你想知道,并不难。您可以复制对象只是这样(假设它包含基本对象,基本类型等)
let myNewObj = Object.assign ({}, myOldObj);
let myNewArr = [].concat (myOldArr);
该对象是否具有类似的事情在他们的对象等数组,你可以深深这个老把戏复制:
let myFancyObjJSON = JSON.stringify (myFancyObj)
let copy = JSON.parse (myFancyObjJSON)
作品绝大多数的时间,除非你的类型是不典型(如地图与符号的定义忽略了这些键的键)和其他一些未经常遇到的一天到一天的情况。
相信我,从经验,重新思考你的结构(再次,除非这只是一个实验)。
有**是没有**传递通过引用在JavaScript中。术语“通过引用”在编程中具有特定的含义(这是“艺术术语”):将引用*传递给变量*到函数中。 JavaScript没有。 –
上面你正在做的是将一个对象引用传递给一个函数(按值,该值是对象引用)。 –
不,是(但正如TJ所说,“指针”是值),没有...... – RobG