我在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。错误将是这样的:
静态属性只能用于类中的定义。
你的回答非常感谢!
谢谢!
答案 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保持不变。)