Reputation: 39456
Is it possible to make a dynamic
class in AS3 only accept dynamically created properties if they're a given type?
For example, I may only want Sprites to be allowed. So take this quick example class:
public dynamic class Test extends Object{}
And a few quick lines to get an idea of what I mean:
var test:Test = new Test();
test.something = 32; // error
test.something = "party hats"; // error
test.something = new Sprte(); // works
Maybe using the proxy class/namespsace there's a way to manipulate whatever is run when creating variables dynamically?
Upvotes: 3
Views: 340
Reputation: 3395
The Test class:
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;
}
}
}
The App:
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);
}
}
}
The output:
Error: No Sprite given: 32
[object Sprite]
Upvotes: 10