Hola de nuevo.
No me he dado cuen

, hay una manera más practica

, no es necesario utilizar prototype de Function, básicamente es lo mismo de antes.
Código:
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--
// Enviamos el objeto y las variables
function start_countdown(obj,n){
// añadimos propiedades al objeto para almacenar las variables
obj.const_n = n;
obj.n = n + 1;
obj.ctrl;
// Asignamos la función al objeto
obj.count_down = function(){
// Evitamos que el usuario acelere la cuenta atrás
this.onclick = "new Function(return false)";
this.n--;
this.innerHTML = this.n;
// Si a terminado la cuenta atrás volvemos a permitir la cuenta atrás
if(this.n == 0){
this.innerHTML = this.n + " Haz click para iniciar la cuenta atrás otra vez.";
this.onclick = function(){
this.n = this.const_n + 1;
this.count_down();
}
}
if(this.n > 0) this.ctrl = window.setTimeout(""+this.id+".count_down()",2000);
}
// Almacenamos el objeto en una variable, es necesario para el método setTimeout
eval("window."+obj.id+" = obj");
// Llamamos a la función
obj.count_down();
}
//-->
</script>
</head>
<body>
<div id="test" onclick="start_countdown(this,10)">10 Haz click para iniciar la cuenta atrás</div><br>
<div id="test2" >20 Haz click para iniciar la cuenta atrás</div><br>
<script language="JavaScript" type="text/javascript">
<!--
document.getElementById("test2").onclick = function(){
start_countdown(this,20);
}
//-->
</script>
</body>
</html>
Para que sea el código más "legible" se podría poner la function count_down fuera de la función start_countdown.
Código:
<html>
<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--
function count_down(){
// Evitamos que el usuario acelere la cuenta atrás
this.onclick = "new Function(return false)";
this.n--;
this.innerHTML = this.n;
// Si a terminado la cuenta atrás volvemos a permitir la cuenta atrás
if(this.n == 0){
this.innerHTML = this.n + " Haz click para iniciar la cuenta atrás otra vez.";
this.onclick = function(){
this.n = this.const_n + 1;
this.count_down();
}
}
if(this.n > 0) this.ctrl = window.setTimeout(""+this.id+".count_down()",2000);
}
// Enviamos el objeto y las variables
function start_countdown(obj,n){
// añadimos propiedades al objeto para almacenar las variables
obj.const_n = n;
obj.n = n + 1;
obj.ctrl;
// Asignamos la función al objeto
obj.count_down = count_down
// Almacenamos el objeto en una variable, es necesario para el método setTimeout
eval("window."+obj.id+" = obj");
// Llamamos a la función
obj.count_down();
}
//-->
</script>
</head>
<body>
<div id="test" onclick="start_countdown(this,10)">10 Haz click para iniciar la cuenta atrás</div><br>
<div id="test2" >20 Haz click para iniciar la cuenta atrás</div><br>
<script language="JavaScript" type="text/javascript">
<!--
document.getElementById("test2").onclick = function(){
start_countdown(this,20);
}
//-->
</script>
</body>
</html>
Lo de "legible" es cuestión de gustos.
Bueno, espero haber acertado.
Saludos