code: function( clip, optionalRoot ) {
  
  		var root = optionalRoot || this._root,
  			rootUuid = root.uuid,
  
  			clipObject = typeof clip === 'string' ?
  					THREE.AnimationClip.findByName( root, clip ) : clip,
  
  			clipUuid = clipObject !== null ? clipObject.uuid : clip,
  
  			actionsForClip = this._actionsByClip[ clipUuid ],
  			prototypeAction = null;
  
  		if ( actionsForClip !== undefined ) {
  
  			var existingAction =
  					actionsForClip.actionByRoot[ rootUuid ];
  
  			if ( existingAction !== undefined ) {
  
  				return existingAction;
  
  			}
  
  			// we know the clip, so we don't have to parse all
  			// the bindings again but can just copy
  			prototypeAction = actionsForClip.knownActions[ 0 ];
  
  			// also, take the clip from the prototype action
  			if ( clipObject === null )
  				clipObject = prototypeAction._clip;
  
  		}
  
  		// clip must be known when specified via string
  		if ( clipObject === null ) return null;
  
  		// allocate all resources required to run it
  		var newAction = new THREE.
  				AnimationMixer._Action( this, clipObject, optionalRoot );
  
  		this._bindAction( newAction, prototypeAction );
  
  		// and make the action known to the memory manager
  		this._addInactiveAction( newAction, clipUuid, rootUuid );
  
  		return newAction;
  
  	}
docs: return an action for a clip optionally using a custom root target object (this method allocates a lot of dynamic memory in case a previously unknown clip/root combination is specified)