按引用传递变量

因为数组和 Object 数据类型包含对值的引用而不是包含实际的值,因此在使用数组和对象时要小心。

下例显示了如何按引用传递对象。在创建数组的副本时,实际上创建的只是对数组内容的引用(或别名)的副本。编辑第二个数组中的内容时,将修改第一个和第二个数组的内容,因为它们都指向同一个值。

按引用传递对象:

  1. 选择"文件">"新建",然后选择"Flash 文档"创建一个新的 FLA 文件,并将它保存为 copybyref.fla
  2. 在时间轴中选择第 1 帧,在"动作"面板中键入下面的代码:
    var myArray:Array = new Array("tom", "josie");
    var newArray:Array = myArray;
    myArray[1] = "jack";
    trace(myArray); // tom,jack
    trace(newArray); // tom,jack
    
  3. 选择"控制">"测试影片"对 ActionScript 进行测试。

    此 ActionScript 创建了一个名为 myArray 的 Array 对象,它包含两个元素。创建变量 newArray 并将引用传递给 myArray。当将 myArray 的第二个元素更改为 jack 时,它将影响引用它的每个变量。trace() 语句将 tom,jack 发送到"输出"面板。

    注意

    Flash 使用基于零的索引,这意味着 0 是数组中的第一项,1 是第二项,依此类推。

在下例中,myArray 包含一个 Array 对象,因此您可以按引用将该数组传递给函数 zeroArray()。函数 zeroArray() 会将 Array 对象作为参数来接受,并将该数组的所有元素设置为 0。因为该数组是按引用进行传递的,所以该函数可以修改它。

按引用传递数组:

  1. 选择"文件">"新建",然后选择"Flash 文档"创建一个新的 FLA 文件,并将它保存为 arraybyref.fla
  2. 将下面的 ActionScript 添加到时间轴的第 1 帧:
    function zeroArray (theArr:Array):Void {
      var i:Number;
      for (i = 0; i < theArr.length; i++) {
        theArr[i] = 0;
      }
    }
    
    var myArr:Array = new Array();
    myArr[0] = 1;
    myArr[1] = 2;
    myArr[2] = 3;
    trace(myArr); // 1,2,3
    zeroArray(myArr);
    trace(myArr); // 0,0,0
    
  3. 选择"控制">"测试影片"对 ActionScript 进行测试。

    此 ActionScript 中的第一个 trace() 语句显示 myArray 数组的原始内容 (1,2,3)。在调用了 zeroArray() 函数并传递一个对 myArray 数组的引用之后,该数组的各个值都将被覆盖并被设置为 0。后面的 trace() 语句显示 myArray 数组的新内容 (0,0,0)。因为是按引用(而不是按值)传递数组的,所以不需要从 zeroArray() 函数中返回数组的更新内容。

有关数组的详细信息,请参阅"关于数组"