添加到数组的Javascript对象是按值传递还是引用?

时间:2012-07-23 03:45:15

标签: javascript pass-by-reference pass-by-value

  

可能重复:
  Is JavaScript a pass-by-reference or pass-by-value language?

在这个文件中我有一个对象this.objectA和this.allAs; this.objectA包含一些属性。 每次我得到一个新的this.objectA,我将它添加到数组this.allAs。 当我得到一个新的时候,我总是重新分配this.objectA。

稍后我检查我的数组this.allAs,我发现它正确存储了不同的this.objectA。 为什么this.objectA会被覆盖,this.all内的对象没有被覆盖? (我希望所有那些存储的对象指向相同的this.objectA,但它没有)Javascript是通过对象的值传递???

1 个答案:

答案 0 :(得分:0)

你必须对你正在做的事情有更具体的了解。 JavaScript通过引用传递,但如果您将本地副本保存在任何地方,并从返回语句中复制这些值,那么您将不再使用引用 - 它们不再是指向完全相同的对象的指针。

这是展示传递参考的东西:

Bob = { name : "Bob", age : 32 };
function giveBobTo (obj, bobject) { obj.bob = bobject; }

Billy = {};
Jim = {};

giveBobTo(Billy, Bob);
giveBobTo(Jim, Bob);

Jim.bob.cars_on_lawn = 8;
Billy.bob.cars_on_lawn;  // 8;
Bob.cars_on_lawn;        // 8;

console.log( "Billy-Bob equals Jim-Bob equals Bob:",
             Billy.bob === Jim.bob === Bob); // true