¿cabe la posiblidad que de que tengas un ejemplo en linea para comprobarlo? es que en mi interpretacion mental entiendo que debe funcionarte. ando un tanto vago como para preparar varias imagenes y escribir el resto del codigo que falta.
@edit,
no estoy seguro, sospecho que el problema esta en la linea #29. setInterval ejecuta la funcion en el contexto de window, de modo que la referencia this en play se refiere a window y no a la instancia creada. tienes que crear un closure de una variable que haga referencia a la instancia creada. probablemente como lo siguiente.
Código:
var that = this;
this.timer=setInterval(function(){that.play();},this.speed);