可能重复:
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'?
答案 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; }
}