【问题标题】:Call to a possibly undefined method '' through a reference with static type Class通过静态类型 Class 的引用调用可能未定义的方法
【发布时间】:2015-02-16 11:06:29
【问题描述】:

我在 Flash Professional 中制作了一个小的 .fla 文件,我在 Flash Professional 中添加了 .as(ActionScript 文件),我在 .as(ActionScript 文件)中添加了类似下面的代码,但出现了错误,我是试图弄清楚,但不能,所以我决定把它贴在这里。

package
{
    import flash.display.MovieClip;

    public class Bag extends MovieClip
    {
        static var firstBag:String;

        public static function set setFirstBag(value:String):void
        {
            firstBag = value;
        }

        public static function get getFirstBag():String
        {
            return firstBag;
        }
    }
}

我这样称呼它:

button1.addEventListener(MouseEvent.CLICK, onClickFirstButton);

function onClickFirstButton(e:MouseEvent):void
{
   Bag.setFirstBag("First slot in the bag has been filled up!");
}

但我收到了以下错误:

通过引用调用可能未定义的方法 setFirstBag 具有静态类型 Class。

我会做错什么?

.as 文件和 .fla 文件在同一个文件夹中。

如果我将 Bag 类更改为静态。错误会是这样的:

静态属性只能用于类内的定义。

非常感谢您的回答!

谢谢!

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    您使用 get 就像它是一种方法一样,但它们是属性的访问器,而不是:

    Bag.setFirstBag("First slot in the bag has been filled up!");
    

    使用

    Bag.setFirstBag ="First slot in the bag has been filled up!";
    

    【讨论】:

      【解决方案2】:

      一些额外的想法......

      虽然在语法上有效,但您的 getter 和 setter 的定义和命名令人困惑且不典型,我认为这导致您对行为感到困惑。您实际上已经定义了两个单独的属性,一个是只写的(“setFirstBag”),一个是只读的(“getFirstBag”)。通常您将 getter/setter 定义为相同的属性(例如“firstBag”),并且属性名称中没有任何“get”或“set”,因为这是 getter/setter 为您定义的。示例:

      private static var _firstBag:String;
      public static function get firstBag():String {
          return _firstBag:
      }
      public static function set firstBag(value:String):void {
          _firstBag = value;
      }
      
      // usage
      Bag.firstBag = "stuff";
      trace(Bag.firstBag); // "stuff"
      

      此外,您很可能有充分的理由在这里使用 getter/setter,或者您可能只是更喜欢它,但从您发布的代码中,您可以定义一个 public static var 来做同样的事情。 (如果你这样做了,如果你需要一些副作用逻辑,重构为 getter/setter 将是微不足道的,因为公共 API 保持不变。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        相关资源
        最近更新 更多