¿Pasar este método en setTimeout no funciona?

Estoy viendo un problema con pasar el método de objeto como argumento para setTimeout. Sé que dentro de la función anidada, el alcance de esto debe establecerse manualmente, pero ¿qué pasa si paso directamente el objeto de la función, en mi caso este. ¿Cuál es la necesidad de declarar la función anónima como primer argumento? Este conteo ya es una función.

Mozilla también usa function (msg) {self.remind (msg);} en lugar de this.remind dentro del primer argumento setTimeout.

function Timer(count,start){
    this.count = count;
    this.start = start;

}

//below code works
Timer.prototype.counting = function(){
    var self = this;
    setTimeout(function(){self.counting();},this.start);
    console.log(this.count);
    this.count++;
};

//below code doesn't work
/*
Timer.prototype.counting = function(){
    setTimeout(this.counting,this.start);
    console.log(this.count);
    this.count++;
};
*/
var t1 = new Timer(0,1000);
t1.counting();
var t2 = new Timer(100,1000);
t2.counting();

Respuestas a la pregunta(1)

Su respuesta a la pregunta