Don't take my word, think about it yourself! If you write a code for an object, which is meant to be executed by all it's instances, then it becomes a huge drain on the resources. Say you wrote an enterframe on the object to see whether it is colliding with something. So, every frame, all of it's instances will be executing that same code simultaneously, so the memory and processing power required increases exponentially with each instance you add. On the other hand, if you store your instances somewhere, and then use a loop (for loop is preferable than while) to go through each instance, the code will be executed for one instance at a time, thereby requiring the resources for one instance no matter how many instances you have.


Now for the "strategy" part...... it's more of a shortcut or cheat, rather than a strategy, and it varies from programmer to programmer! basically inside your class create a public variable like
Code:
package
{
  //import whatever
  public class Player extends MovieClip
  {
     public var my_type:String = "player";
  }
}
now you can loop through the display list and check it
Code:
for(var i:int=0 ; i<stage.numChildren; i++)
{
  var temp = stage.getChildAt(i); //get the object at index i of display list of stage
  if(temp.my_type!=undefined) // if the property my_type exists on the child
  {
      if(temp.my_type == "player") // And if the instance is of player class
      {
          // do whatever you want
       }
   }
}

You can normally just use a public variable, and it is good if you want to edit the value from time to time. I use private variable with getter function so that I do not change the value by mistake.