AS3:重写代理getProperty方法

时间:2011-06-06 04:28:53

标签: flash actionscript-3 proxy getter-setter

我在尝试使用Proxy类并覆盖getProperty()方法时遇到了一个特殊问题。我在下面附上了我的示例类代码:

package
{
    import flash.utils.Proxy;
    import flash.utils.flash_proxy;

    public class Thing extends Proxy
    {
        // holder object
        private var _holder:Object;

        /**
         * Constructor
         */
        public function Thing()
        {
            _holder =
            {
                stuff: "thing"
            };
        }

        /**
         * Override getProperty
         */
        override flash_proxy function getProperty(name:*):*
        {
            trace(name + " being accessed");
            return _holder[name];
        }
    }
}

我一直在尝试使用它来使一些属性为只读(根据previous question of mine上的答案),但是有一些奇怪的行为,我似乎无法解决。

使用上面的内容,我尝试访问变量stuff,如下所示:

var t:Thing = new Thing();
trace(t.stuff);

然而,这会引发以下错误:

  

1119:通过引用访问可能未定义的属性内容   用静态类型的东西。

但如果我这样做:

trace(t["stuff"]);

工作正常。我做错了什么?

1 个答案:

答案 0 :(得分:3)

这是因为您的课程不是动态的,只需添加“动态”关键字,一切都会很好:

public dynamic class Thing extends Proxy