呼吁一种可能未定义的方法''通过静态类型Class的引用

时间:2015-02-16 11:06:29

标签: actionscript-3 flash

我在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   使用静态类型。

我能做错什么?

.as文件和.fla文件位于同一文件夹中。

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

  

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

你的回答非常感谢!

谢谢!

2 个答案:

答案 0 :(得分:2)

你正在使用它就像是一个方法,但它们是属性的访问器而不是:

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

使用

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

答案 1 :(得分:0)

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

虽然语法上有效,但getter和setter的定义和命名令人困惑且不典型,我认为这会导致您对行为的混淆。您实际上已经定义了两个单独的属性,一个是只写(“setFirstBag”),另一个是只读(“getFirstBag”)。通常,您将getter / setter定义为相同的属性(ex“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保持不变。)