2

在ActionScript 3中有一种方法(黑客 - 也许通过方括号,也许通过克隆一个对象,也许通过原型,也许通过命名空间,...)来更改私有或受保护班级成员?访问受保护或私有属性

举例来说,如果我有一个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:错误#1069:房产windowOptions不IconToast发现没有默认值)。

+0

意味着它只能由扩展它的类来访问。你不扩展它,但创建它的一个变量实例。 –

回答

6

通过扩展的基类,并给予私人/受保护方法/属性等

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

私人它可能不是可能的,但类似于上述溶液在一定程度上也可以是公共访问执行此做

问候

+0

这是最好的方法。另一种方法是在加载swf之前修改ABC。 – ansiart

1

不,有没有办法直接改变其修改(这就是为什么它被定义为public,protected和private,对吧?)。 Lukasz'Severiaan'Grela的解决方案是可以的,但它可以更好:使用getter/setter来获取读/写功能。

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

public function get windowOption():int; 

和私营属性只属于自己的类,所以如果他们包装成SWC,你看不到任何人:d。

相关问题