访问受保护或私有财产
Posted
技术标签:
【中文标题】访问受保护或私有财产【英文标题】:Accessing protected or private property 【发布时间】:2012-06-22 14:35:55 【问题描述】:在 ActionScript 3 中有一种方法(hack - 可能通过方括号,可能通过克隆对象,可能通过原型,可能通过命名空间,...)来更改私有或受保护班级成员?
例如,如果我有一个由 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();
(给我运行时错误ReferenceError: Error #1069: Property windowOptions not found on IconToast and there is no default value)。
【问题讨论】:
通过扩展基类并提供对私有/受保护方法/属性等的公共访问权限来做到这一点。
public class MyIconToast extends IconToast
public function getWindowOptions():WindowOptions
return windowOptions;//here you can access protected (not private though:);
对于私人来说,这可能是不可能的,但在某种程度上类似于上述解决方案是可以做到的
最好的问候
【讨论】:
这是最好的方法。另一种方法是在加载 swf 之前修改 ABC。【参考方案2】:不,没有办法直接改变它的修饰符(这就是为什么它被定义为公共的、受保护的和私有的,对吧?)。 Lukasz 'Severiaan' Grela 的解决方案还可以,但可以更好:使用 getter/setter 检索读/写函数。
public function set windowOption(option:int):void;
public function get windowOption():int;
并且私有属性只属于它们的类,所以如果它们被打包到 SWC 中,你就看不到它们中的任何一个:D。
【讨论】:
以上是关于访问受保护或私有财产的主要内容,如果未能解决你的问题,请参考以下文章
是否可以为具有 1)返回类型 void、2)访问说明符私有或受保护的方法编写单元测试?