Если честно, не понял. Запись мудреная.
Добавлено через 1 час 14 минут
И где вот эта функция должна быть написана:

Код AS3:
public static function cloneShapeData( shapeData:ShapeData ):Shape
{
return (new (shapeData as Object).constructor( shapeData )) as Shape;
}
Если в самой ShapeData и далее в дочерних переписана, то можно было бы и проще.
Что то типа:

Код AS3:
public static function getShape():Shape{
return new Shape(this)
}
Но я не хотел что бы ShapeData еще заведовала тем, что создовала какой то конкретный объект