【发布时间】:2012-07-15 18:30:00
【问题描述】:
这个问题我实在是太含糊了,但我想你会明白的……
我正在用 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 只是scene.internals.draw 时运行良好,因为它直接更改了数组。但是现在,我将新值分配给本地 location 变量,而不是所需的 scene.internals.draw 一个!
问题:如何使用 = 运算符为“真实”对象而不是包含对这些对象的引用的变量(如 location)赋值?
显而易见的解决方案是,在方法结束时:
scene.internals.draw = location.slice();
没关系,唯一的副作用是我将不得不写两次原始名称,并编辑两次,这不是什么大问题。但是,我可能会发现自己处于其他可能需要该功能的情况,所以我仍然想要一个答案。
【问题讨论】:
-
您可以将 location 重写为处理 get 和 set 的函数。 location() 将获取,并且 location(arr) 将设置。不确定您是否可以使用 = 符号
-
不确定你的意思,@CoryDanielson。
-
我在想这样的事情:jsfiddle.net/s2QQK/1 但 Esailija 的回答非常好。这个 getter/setter 有点麻烦
标签: javascript arrays oop object methods