AS3为什么我以错误的方式使用get / getter?

时间:2013-07-20 17:29:13

标签: actionscript-3 get encapsulation getter

我的封装有问题,但我不知道它是什么:

我有一个名为Main的文档类绑定到舞台:

package  {

import flash.display.MovieClip;

  public class Main extends MovieClip
  {
    var chapter1:Chapter1;

    public function Main() {
        // constructor code
        chapter1 = new Chapter1;
        addChild(chapter1);
    }   
  }
}

绑定到MovieClip的Chapter1类:

package  {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;

 public class Chapter1 extends MovieClip {

    public var numberOfFrames:uint;

    public function Chapter1() 
    {
        numberOfFrames = 3;

        //constructor
        trace("Chapter 1 constructed");
        Transition.moveFromTo();

    }

    public static function get getNumberOfFrames():uint
    {
        return numberOfFrames;
    }

 }
}

和一个名为Transition的类,我喜欢用作一个简单的实用程序:

package  {

 public class Transition {

    public var gotNumber:uint;

    public function Transition() {
        trace(Chapter1.getNumberOfFrames);
    }

    static public function moveFromTo()
    {
        /* in the end id like to use this as a utility working with 
                     NumberOfFrames from a parent Chapter instance.*/
    }

 }
}

我收到一条错误消息告诉我:“1120:访问未定义的属性numberOfFrames。”所以getter函数本身似乎不允许使用numberOfFrames。但我不明白为什么,对于我找到的所有例子(虽然只使用两个类而没有绑定)使得getter返回一个var就像那样。我想念那里的东西吗?

2 个答案:

答案 0 :(得分:0)

您已将getter定义为静态。只需删除static关键字:

public function get getNumberOfFrames():uint
{
    return numberOfFrames;
}

将某些内容定义为静态意味着该类的每个实例都使用该属性或方法的单个实例 - 我猜这不是您想要的(假设您创建的每个章节可能对numberOfFrames都有不同的值?)

答案 1 :(得分:0)

您的getNumberOfFrames()函数是一个静态函数,但它正在尝试访问numberOfFrames这是一个实例成员变量。您必须创建Chapter1的实例,以便分配numberOfFrames的实例 - numberOfFramesChapter1的特定实例之外不存在。

此外,getNumberOfFrames()函数本身需要访问Chapter1实例才能检索其numberOfFrames成员 - 每个实例之外都存在一个静态函数。

一种可能的解决方案是将Chapter1实例分配给Transition类,以便在尝试获取帧数时可以使用该实例。

如果您的程序中有多个Chapter1和多个Transition对象,我建议您从类中删除static个关键字,因为所有静态函数都需要一个实例才能工作用。