Javascript - 通过引用传递对象

时间:2012-05-11 22:06:52

标签: javascript arrays prototypejs push prototype

  

可能重复:
  How can I store reference to a variable within an array?

请考虑以下代码:

var a = 'cat';
var b = 'elephant';
var myArray = [a,b];

a = 'bear';

myArray [0]仍然会返回'cat'。有没有办法在数组中存储引用而不是克隆,这样myArray [0]会返回'bear'?

5 个答案:

答案 0 :(得分:7)

虽然我同意其他人说你应该使用myArray [0] =无论如何,如果你真的想要完成你想要完成的任务,你可以确保数组中的所有变量都是对象。

var a = {animal: 'cat'},
    b = {animal: 'elephant'};

var myArray = [a, b];

a.animal = 'bear';

myArray [0] .animal现在是'熊'。

答案 1 :(得分:6)

没有。 Javascript不会以这种方式进行引用。

答案 2 :(得分:1)

不,不可能。 JavaScript不支持此类引用。

仅存储对象作为参考。但我怀疑这就是你想要的。

答案 3 :(得分:1)

如果你想让myArray [0]等于熊,那么你已经回答了自己的问题:

myArray[0] = "bear";

答案 4 :(得分:1)

即使您的数组包含对象的引用,使变量引用完全不同的对象也不会更改数组的内容。

您的代码不会修改引用的变量对象。它使变量a 完全引用不同的对象。

就像你的javascript代码一样,下面的java代码不起作用,因为像javascript一样,java通过值传递对象的引用:

  Integer intOne = new Integer(1);
  Integer intTwo = new Integer(2);

  Integer[] intArray = new Integer[2];
  intArray[0] = intOne;
  intArray[1] = intTwo;

  /* make intTwo refer to a completely new object */

  intTwo = new Integer(45);

  System.out.println(intArray[1]);

  /* output = 2 */

在Java中,如果更改变量引用的对象(而不是为变量分配新引用),则会获得所需的行为。

示例:

  Thing thingOne = new Thing("funky");
  Thing thingTwo = new Thing("junky");

  Thing[] thingArray = new Thing [2];

  thingArray[0] = thingOne;
  thingArray[1] = thingTwo;

  /* modify the object referenced by thingTwo */

  thingTwo.setName("Yippee");

  System.out.println(thingArray[1].getName());

  /* output = Yippee */

  class Thing
  {
      public Thing(String n) { name = n; }
      private String name;
      public String getName() { return name; }
      public void setName(String s) { name = s; }
  }