ya, imaginaba que el this no hacia referencia a la clase... es por eso que es necesario pasar perro como parametro, entonces ahora si hace referencia. por otro lado no he provado con self, no se me havia ocurrido... si eso funciona me boy a ahorrar algunas lineas de codigo y parametros, por otrolado tendre que modificar algunos de mis objetos...
te pongo un ejemplo real para que veas como estoy haciendo esto.
Esta clase lo que hace es un degradado de color al elemento al que se le aplica...
Código :
function degradadoColor(numeroR, numeroG, numeroB, numeroRFinal, numeroGFinal, numeroBFinal, id, objeto){
this.letras = new Array();
this.letras[0]="0";
this.letras[1]="1";
this.letras[2]="2";
this.letras[3]="3";
this.letras[4]="4";
this.letras[5]="5";
this.letras[6]="6";
this.letras[7]="7";
this.letras[8]="8";
this.letras[9]="9";
this.letras[10]="a";
this.letras[11]="b";
this.letras[12]="c";
this.letras[13]="d";
this.letras[14]="e";
this.letras[15]="f";
this.convertirExadecimal = function(numeroDecimal){
var digito2 = Math.floor(numeroDecimal/16)
var digito1 = numeroDecimal - (digito2 * 16)
hexadecimal= this.letras[digito2] + this.letras[digito1];
return hexadecimal
}
numeroB2 = numeroB;
numeroBFinal2 = numeroBFinal;
numeroG2 = numeroG;
numeroGFinal2 = numeroGFinal;
numeroR2 = numeroR;
numeroRFinal2 = numeroRFinal;
id2 = id;
objeto2 = objeto
this.incrementaRGB = function(numeroR, numeroG, numeroB, numeroRFinal, numeroGFinal, numeroBFinal, id, objeto){
//guardo las variables para no perderlas al hacer la segunda llamada de la funcion
numeroB2 = numeroB;
numeroBFinal2 = numeroBFinal;
numeroG2 = numeroG;
numeroGFinal2 = numeroGFinal;
numeroR2 = numeroR;
numeroRFinal2 = numeroRFinal;
id2 = id;
objeto2 = objeto
//comienzo a degradar B
if(numeroR2 < numeroRFinal2){
numeroR2++;
}else if(numeroR2 > numeroRFinal2){
numeroR2--;
}else if(numeroR2 == numeroRFinal2){
numeroR2 = numeroRFinal2;
}
//llamo a la funcion para dconvertir hexadecimal y lo guardo en una varible.
hexadecimalB = this.convertirExadecimal(numeroB2);
//comienzo a degradar G
if(numeroG2 < numeroGFinal2){
numeroG2++;
}else if(numeroG2 > numeroGFinal2){
numeroG2--;
}else if(numeroG2 == numeroGFinal2){
numeroG2 = numeroGFinal2;
}//llamo a la funcion para dconvertir hexadecimal y lo guardo en una varible.
hexadecimalG = this.convertirExadecimal(numeroG2);
//comienzo a degradar R
if(numeroB2 < numeroBFinal2){
numeroB2++;
}else if(numeroB2 > numeroBFinal2){
numeroB2--;
}else if(numeroB2 == numeroBFinal2){
numeroB2 = numeroBFinal2;
}
//llamo a la funcion para dconvertir hexadecimal y lo guardo en una varible.
hexadecimalR = this.convertirExadecimal(numeroR2);
if(numeroR2 == numeroRFinal2 && numeroG2 == numeroGFinal2 && numeroB2 == numeroBFinal2){
clearInterval(intervaloRGB);
}
document.getElementById(id2).style.backgroundColor= "#" + hexadecimalR + hexadecimalG + hexadecimalB;
}
this.degradar=function(){
intervaloRGB = setInterval(objeto2 + ".incrementaRGB(numeroR2, numeroG2, numeroB2, numeroRFinal2, numeroGFinal2, numeroBFinal2, id2, objeto2)",1);
}
}
y aqui la llamada en el html
Código :
<div id="degradame" style="width:200px; height:200px; color:#ff0000; background-color: #000;" onclick="d.degradar();">
<script type="text/javascript">
var d = new degradadoColor(0,0,0,255,255,255,"degradame","d");
</script>
algo de mi texto...
</div>
Provare con self y ya publicare los resultados obtenidos.
PD. la funcion anterior es parte de obj.js la libreria que estoy armando...