Static typing is a great thing. It makes a really good IDE support possible. It’s encourage you by developing, because your code is validated by compiler and you can write intuitive API’s.
But some times it is also cool to have dynamic typing.
AS3 is a very creative language also from this point of view. It let’s you extend code in many ways.
First and most convenient way is class inheritance. So you have a class A and it is extended by class B. Nothing special it is a rudimentary feature of an OO language.
Second and not convenient way of extending an instance of a class is to declare the class as dynamic (have a look at Object class).
package { import flash.display.Sprite; public class MyClass extends Sprite { public function MyClass() { var a : Object = new Object(); a.element = 30; trace('a.element: ' + (a.element)); } } } |
But you can also extend a class that is final or not dynamic in AS3, because AS3 is not only Class based OO language but also Prototype based. That’s how we can implement so called monkey patching.
package { import flash.display.Sprite; public class MonkeyPatch extends Sprite { public function MonkeyPatch() { Object.prototype.sayHello = function():void{trace("hello from " + this);}; var myThis : * = this; myThis.sayHello(); var s : Sprite = new Sprite(); addChild(s); var myS : * = s; myS.sayHello(); } } } |