2

在 ActionScript 3 中是否有一种方法(hack - 可能通过方括号,可能通过克隆对象,可能通过原型,可能通过命名空间,...)来更改类的私有或受保护成员?

例如,如果我有一个IconToast由 someLibrary.swc 提供的课程,并且我知道它有一个

    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: Error #1069: Property windowOptions not found on IconToast and there is no default value)。

4

2 回答 2

6

通过扩展基类并授予对私有/受保护方法/属性等的公共访问权限来做到这一点。

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

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

最好的祝福

于 2012-06-20T12:56:18.627 回答
1

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

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

public function get windowOption():int;

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

于 2012-06-20T15:31:48.087 回答