AS3 - 从另一个对象访问对象的静态变量的属性

时间:2009-11-07 15:24:16

标签: flash actionscript-3 static

我有2个类,Display保存当前选定的组件:

public class Display
{
    public static var selectedComponent:Component;
}

组件具有ID字符串,并且单击时设置selectedComponent变量:

public class Component extends MovieClip
{
    public var id:String;

    addEventListener(MouseEvent.CLICK, function() {
        Display.selectedComponent = this;
    });
}

我现在希望能够使用Display.selectedComponent.id =“test”设置ID;

我遇到的问题是转换错误:

TypeError: Error #1034: Type Coercion failed: cannot convert global@4693041 to Component.

删除selectedComponent变量类型,使其读取public static var selectedComponent;删除转换错误,似乎更改了ID变量,但它似乎只是对象的副本。

有什么建议吗?

由于

2 个答案:

答案 0 :(得分:1)

我认为在将“this”分配给selectedComponent时你的范围是错误的。 本地函数定义中的“this”未指向组件类。

试试这样:

var scope:Component = this;    
addEventListener(MouseEvent.CLICK, function() {
     Display.selectedComponent = scope;
});

或者像这样:

import flash.events.Event;
public class Component extends MovieClip
{


    public var id:String;

    public function Component() {
        addEventListener(MouseEvent.CLICK, onClick);
    }

    private function onClick(e:Event) {
        Display.selectedComponent = this;
    }
}

答案 1 :(得分:0)

如果你不使用类型(public static var selectedComponent;),默认情况下它将是Object类型。对象不会在赋值时复制;他们只持有参考文献,因此不会复制。

您的代码看起来应该有用......

我知道这没有任何意义,但是在分配时可能会将this投射到组件可能会有所帮助:Display.selectedComponent = Component(this);你永远不会知道......