ActionScript:在受保护/私有变量上使用'in'?

时间:2010-04-08 17:18:04

标签: actionscript

有没有办法模仿in运算符,但是测试是否存在protectedprivate字段?

例如,这个:

<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

2 个答案:

答案 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>