仅接受给定类型的 AS3 动态类
Posted
技术标签:
【中文标题】仅接受给定类型的 AS3 动态类【英文标题】:AS3 Dynamic class that only accepts a given type 【发布时间】:2011-10-29 12:04:11 【问题描述】:是否可以让 AS3 中的 dynamic
类只接受给定类型的动态创建的属性?
例如,我可能只希望允许精灵。因此,以这个快速示例类为例:
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
也许使用代理类/命名空间有一种方法可以在动态创建变量时操纵运行的任何内容?
【问题讨论】:
【参考方案1】:测试类:
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 总是很有帮助:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/… 奇怪的是flash_proxy
命名空间及其位置仅在 Proxy 类文档的示例中提及。由于它是必需的,我有点惊讶它没有列在 flash.utils 包的自己的命名空间类别(如函数、接口和类)下。以上是关于仅接受给定类型的 AS3 动态类的主要内容,如果未能解决你的问题,请参考以下文章