访问受保护或私有财产



在ActionScript 3中,有没有办法(黑客 - 也许通过方括号,也许通过克隆对象,也许通过原型,也许通过命名空间,...)来更改类的私有或受保护成员?

例如,如果我有一个由someLibrary.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();

(给我运行时错误参考错误:错误 #1069:属性窗口在 IconToast 上找不到选项,并且没有默认值)。

通过扩展基类并允许公共访问私有/受保护的方法/属性等来执行此操作。

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

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

此致敬意

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

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

私有属性只属于它们的类,所以如果它们被打包到 SWC 中,你看不到它们中的任何一个:D。

最新更新