If you want to know the reason for this:
EVERYTHING in flash, apart from the base types, acts as a pointers, whenever you call 'new' (of which declaring an object using {} and arrays using [] implicitly does) it allocates space for that object, whatever type it may be, and gives you a pointer to it.
It's for this reason that the following occurs:
function move(m:MovieClip):Void
{
m._x += 150;
}
because when you pass the movieclip as the argument to the function, you're passing a pointer to the original movieclip, not a copy of it, this is the same for everyobject, whether it be a movieclip, an array, a basic Object instance, whatever.
When flash compiles a class, anything that is simply inside of the declaration, is defined in the static class constructor, as opposed to the constructor called whenever an instance is created of the class through 'new'
Since objects are pointers, not the actual data itself, if you define an object,array, or anything else that is not a base type within the declaration, and not in the constructor for the class, each class will be set up to have the same value at creation, which in this case, means each class will have an instance of that object, pointing to the same object in memory.
It is not strictly static, because you could do the following:
class Test
{
public var o:Object = {x:10};
}
var a:Test = new Test();
var b:Test = new Test();
a.o.x += 10;
trace(b.o.x); //traces 20, the pointer 'o' within a,b are still both pointing to the same object, so it appears to be acting as a static member referenced through the object of the class
a.o = {x:0};
trace(a.o.x); //traces 0
trace(b.o.x); //still traces 20, by using the assignment operator, the value of the pointer has been chaged to point to a new Object.