Hola:
Si puedes usar una cadena para referenciar un objeto, no tiene sentido que incrustes el objeto... fíjate que la recursividad se hace en base a un string, que seguramente en forma nativa se convierta a una función o a un objeto mediante un "eval"...
Una función puede recibir un objeto, que es lo que hace init de tu ejemplo, pero setTimeout lo que recibe es una cadena y debes imaginarte como quedaría esa cadena aplicándole un eval:
alert("init('" + obj + "')"); seguramente muestre esta alerta:
init('Object'), ya que Object es la cadena que devuelve cualquier objeto...
Pero también cualquier objeto lo puedes referenciar en base a una cadena:
var miBoton = document.getElementById("boton");
Luego con window["miBoton"] lo puedes referenciar (fíjate que miBoton) es una variable, pero lo que hay dentro de los corchetes es solo una cadena (no se trata de un objeto)...
Bueno, después de estas reflexiones, verás que puedes usar recursividad en base a cadenas muy fácilmente (como he dicho en otro mensaje, yo lo he hecho en muchas ocasiones)
<body onload="window['boton'] = document.getElementById('boton');init('boton')">
y la función:
function init(obj) {
cont += 5;
window[obj].style.backgroundColor = "rgb(150,150," + cont + ")";
setTimeout("init('" + obj + "')", 1000);
}
¿A que es fácil...
?
Saludos