4

可能重复:
如何在数组中存储对变量的引用?

考虑以下代码:

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

a = 'bear';

myArray[0] 仍将返回“猫”。有没有办法将引用存储在数组中而不是克隆中,以便 myArray[0] 将返回“熊”?

4

5 回答 5

7

While I agree with everyone else saying that you should just use myArray[0] = whatever, if you really want to accomplish what you're trying to accomplish you could make sure that all you variables in the array are objects.

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

var myArray = [a, b];

a.animal = 'bear';

myArray[0].animal is now 'bear'.

于 2012-05-11T23:05:54.467 回答
6

不,JavaScript 不会以这种方式进行引用。

于 2012-05-11T22:08:17.217 回答
1

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

您的代码不会修改a引用的对象变量。它使变量 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; }
  }
于 2012-05-11T22:18:14.507 回答
1

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

只有对象被存储为引用。但我怀疑这是你想要的。

于 2012-05-11T22:08:35.037 回答
1

你已经回答了你自己的问题。如果您希望 myArray[0] 等于 Bear,则设置:

myArray[0] = "bear";
于 2012-05-11T22:12:08.530 回答