4

重複の可能性:
配列内の変数への参照を格納するにはどうすればよいですか?

次のコードを検討してください。

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

a = 'bear';

myArray[0] は引き続き「cat」を返します。myArray[0] が「bear」を返すように、クローンの代わりに配列に参照を格納する方法はありますか?

4

5 に答える 5

7

myArray[0] = なんでも使うべきだと言っている他の人には同意しますが、達成しようとしていることを本当に達成したい場合は、配列内のすべての変数がオブジェクトであることを確認できます。

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

var myArray = [a, b];

a.animal = 'bear';

myArray[0].animal は「bear」になりました。

于 2012-05-11T23:05:54.467 に答える
6

いいえ、JavaScript はそのように参照を行いません。

于 2012-05-11T22:08:17.217 に答える
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; }
  }
于 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 に答える