访问受保护或私有财产

时间:2012-06-20 12:45:26

标签: actionscript-3 actionscript private protected private-members

在ActionScript 3中有一种方法(一个hack - 可能通过方括号,可能通过克隆一个Object,可能通过原型,可能通过名称空间,......)来改变私有或受保护班级成员?

例如,如果我有一个由某个Library.swc提供的IconToast类,我知道它有一个

    protected var windowOptions:WindowOptions;

我能以某种方式改变它吗?我尝试了很多东西,例如:

        var errorToast:IconToast = new IconToast();
        errorToast.addButton("Dismiss");
        errorToast.message = "Error when connecting";
        errorToast['windowOptions'].timeout = 10 * 1000;
        errorToast.show();

(给我运行时错误 ReferenceError:错误#1069:在IconToast上找不到属性windowOptions并且没有默认值)。

2 个答案:

答案 0 :(得分:6)

通过扩展基类并允许公共访问private / protected方法/属性等来执行此操作。

public class MyIconToast extends IconToast
{
    public function getWindowOptions():WindowOptions
    {
        return windowOptions;//here you can access protected (not private though:);
    }
}

对于私人来说可能是不可能的,但在某种程度上可以与上述解决方案相似

祝你好运

答案 1 :(得分:1)

不,没有办法直接改变它的修饰符(这就是为什么它被定义为公共,受保护和私有,对吧?)。 Lukasz'Severiaan'Grela的解决方案还可以,但它可以更好:使用getter / setter来检索读/写功能。

public function set windowOption(option:int):void;

public function get windowOption():int;

并且私有属性仅属于他们的类,因此如果他们被打包到SWC中,您将看不到它们中的任何一个:D。