我无法真正含糊地表达这个问题,但我想你会明白......
我正在用 Javascript 开发一个游戏引擎,该Scene
对象是许多东西的容器,它有一个方法应该改变其中的一个数组,特别是一个包含所有可以绘制的东西的数组。
该数组的访问方式如下:
scene.internals.draw
问题是,它在方法中被多次引用,我认为名称/路径可能会改变。自然,我不想每次更改数组的路径时都更改方法中对它的每个引用,所以我这样做了:
var location = scene.internals.draw;
现在,实际的方法代码和算法可以保持不变,如果场景中数组的名称/路径发生变化,我只需要更改那一行。
它在大多数情况下运行良好。我可以.push(obj)
这样做,等等,但是在某一时刻,我需要“剖析”数组,即将它分成两半,添加一些东西,然后将其放回原处,如下所示:
buff1 = location.slice(0, i); //First slice of the array.
buff2 = location.slice(i, location.length); //Second slice of the array.
//Add something in between those slices.
buff1.push(ob);
location = buff1.concat(buff2); //Problems here!
这在location
just时效果很好scene.internals.draw
,因为它直接更改了数组。但是现在,我将新值分配给局部location
变量,而不是所需的值scene.internals.draw
!
问题:如何使用 = 运算符将值分配给“真实”对象,而不是包含对这些对象的引用的变量(如location
)?
显而易见的解决方案是,在方法结束时:
scene.internals.draw = location.slice();
没关系,唯一的副作用是我将不得不写两次原始名称,并编辑两次,这不是什么大问题。但是,我可能会发现自己处于其他可能需要该功能的情况,所以我仍然想要一个答案。