有没有办法模仿in
运算符,但是测试是否存在protected
或private
字段?
例如,这个:
<mx:Script><![CDATA[
public var pub:Boolean = true;
protected var prot:Boolean = true;
private var priv:Boolean = true;
]]></mx:Script>
<mx:creationComplete><![CDATA[
for each (var prop in ["pub", "prot", "priv", "bad"])
trace(prop + ":", prop in this);
]]></mx:creationComplete>
将跟踪:
pub: true prot: false priv: false bad: false
当我想看时:
pub: true prot: true priv: true bad: false
答案 0 :(得分:2)
您可以尝试访问它并捕获导致的错误。 :)
in
不知道当前打开的任何命名空间(包括私有和受保护的命名空间),并且只会在公共命名空间内查找。
in
对象实际上只是调用Object::hasOwnProperty
。不幸的是,您实际上无法覆盖此方法来改变其行为。可以影响它的唯一类是flash.utils::Proxy
,它实际上使用flash_proxy::hasProperty
来确定hasOwnproperty
的返回值。
所以不,除了尝试之外,别无他法。
答案 1 :(得分:1)
怎么样:
<mx:creationComplete>
for each (var prop:String in ["pub", "prot", "priv", "bad"])
{
try
{
t.text += prop + ":" + this[prop] + "\n";
}
catch (e:Error)
{
t.text += prop + ": false" + "\n";
}
}
</mx:creationComplete>