Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 仅接受给定类型的AS3动态类_Actionscript 3_Actionscript_Dynamic - Fatal编程技术网

Actionscript 3 仅接受给定类型的AS3动态类

Actionscript 3 仅接受给定类型的AS3动态类,actionscript-3,actionscript,dynamic,Actionscript 3,Actionscript,Dynamic,AS3中的动态类是否可以仅接受动态创建的属性(如果它们是给定类型) 例如,我可能只希望允许使用精灵。以这个简单的示例类为例: public dynamic class Test extends Object{} ------- 还有几句简短的话让你明白我的意思: var test:Test = new Test(); test.something = 32; // error test.something = "party hats"; // error test.something = n

AS3中的
动态
类是否可以仅接受动态创建的属性(如果它们是给定类型)

例如,我可能只希望允许使用精灵。以这个简单的示例类为例:

public dynamic class Test extends Object{}
------- 还有几句简短的话让你明白我的意思:

var test:Test = new Test();

test.something = 32; // error
test.something = "party hats"; // error
test.something = new Sprte(); // works
也许使用代理类/名称有一种方法可以在动态创建变量时操作运行的任何内容?

测试类:

package classes {
    import flash.display.Sprite;
    import flash.utils.Proxy;
    import flash.utils.flash_proxy;

    public dynamic class Test extends Proxy {
        private var _properties : Object;

        public function Test() {
            _properties = new Object();
        }

        override flash_proxy function getProperty(name : *) : * {
            return _properties[name];
        }

        override flash_proxy function setProperty(name:*, value:*):void {
            if (!(value is Sprite)) throw new Error("No Sprite given: " + value);       
            _properties[name] = value;
        }
    }
}
应用程序:

package classes {
    import flash.display.Sprite;

    public class TestTest extends Sprite {
        public function TestTest() {
            var test:Test = new Test();

            try {
                test.something = 32; // error
            } catch (e : Error) {
                trace (e);
            }

            try {
                test.something = new Sprite(); // works
            } catch (e : Error) {
                trace (e);
            }

            trace (test.something);
        }
    }
}
输出:

Error: No Sprite given: 32
[object Sprite]

你赢了我!很好的回答:)太棒了,我知道这是一种类似的东西。干杯APIDoc总是很有用:奇怪的是,
flash\u代理
名称空间及其位置只在代理类文档的示例中提到。由于它是必需的,我有点惊讶它没有被列在flash.utils包的名称空间类别(如函数、接口和类)下。