Actionscript 方法内部引用变量

Actionscript 方法内部引用变量,actionscript,global-variables,Actionscript,Global Variables,这看起来很长,但这是一个非常简单的问题。使用以下代码: public class Map extends MovieClip { var dragdrops:Array; var numOfMatches:uint = 0; var speed:Number = 25; public function Map() { // constructor code var dragdrops = [one_mc,two_mc,t

这看起来很长,但这是一个非常简单的问题。使用以下代码:

public class Map extends MovieClip
{

    var dragdrops:Array;
    var numOfMatches:uint = 0;
    var speed:Number = 25;

    public function Map()
    {
        // constructor code
        var dragdrops = [one_mc,two_mc,three_mc,four_mc,five_mc,six_mc];

        var currentObject:DragDrop;

        for (var i:uint = 0; i < dragdrops.length; i++)
        {
            currentObject = dragdrops[i];
            currentObject.target = getChildByName(currentObject.name + "_target");
        }


    }

    public function match():void
    {
        numOfMatches++;
        if(numOfMatches == dragdrops.length)
        {
            win.addEventListener(Event.ENTER_FRAME, winGame);
        }
    }
public类映射扩展了MovieClip
{
var dragdrops:数组;
var numOfMatches:uint=0;
var速度:数字=25;
公共功能图()
{
//构造代码
var dragdrops=[一个mc,两个mc,三个mc,四个mc,五个mc,六个mc];
var currentObject:DragDrop;
对于(变量i:uint=0;i
我得到这个错误

TypeError:Error#1009:无法访问null的属性或方法 对象引用.at Map/match()[G:_flash\edu\drag\u drop\Map.as:34] 在DragDrop/drop()[G:_flash\edu\drag\u drop\DragDrop.as:41]

我假设这是因为我引用了全局数组“dragdrops”,它当前是一个空值

但是,通过将dragdrops.length值传递给另一个全局变量,下面的代码可以完美地工作

public class Map extends MovieClip
{

    var dragdrops:Array;
    var dragdropslength:Number = 0;
    var numOfMatches:uint = 0;
    var speed:Number = 25;

    public function Map()
    {
        // constructor code
        var dragdrops = [one_mc,two_mc,three_mc,four_mc,five_mc,six_mc];

        var currentObject:DragDrop;

        for (var i:uint = 0; i < dragdrops.length; i++)
        {
            currentObject = dragdrops[i];
            currentObject.target = getChildByName(currentObject.name + "_target");
        }

        dragdropslength = dragdrops.length

    }

    public function match():void
    {
        numOfMatches++;
        if(numOfMatches == dragdropslength)
        {
            win.addEventListener(Event.ENTER_FRAME, winGame);
        }
    }
public类映射扩展了MovieClip
{
var dragdrops:数组;
var DRAGDROPSLENGHT:Number=0;
var numOfMatches:uint=0;
var速度:数字=25;
公共功能图()
{
//构造代码
var dragdrops=[一个mc,两个mc,三个mc,四个mc,五个mc,六个mc];
var currentObject:DragDrop;
对于(变量i:uint=0;i
虽然这样做很好,但我想知道是否有一种更优雅的解决方案能够在不使用额外变量的情况下从Map()构造函数中引用dragdrops值。

您可以直接在构造函数中赋值给“dragdrops”,从而初始化实例变量。只需删除前面的“var”在映射构造函数的第一行中

public class Map extends MovieClip
{

    var dragdrops:Array;
    var dragdropslength:Number = 0;
    var numOfMatches:uint = 0;
    var speed:Number = 25;

    public function Map()
    {
        // constructor code
        var dragdrops = [one_mc,two_mc,three_mc,four_mc,five_mc,six_mc];

        var currentObject:DragDrop;

        for (var i:uint = 0; i < dragdrops.length; i++)
        {
            currentObject = dragdrops[i];
            currentObject.target = getChildByName(currentObject.name + "_target");
        }

        dragdropslength = dragdrops.length

    }

    public function match():void
    {
        numOfMatches++;
        if(numOfMatches == dragdropslength)
        {
            win.addEventListener(Event.ENTER_FRAME, winGame);
        }
    }