domingo, 9 de dezembro de 2012

Javascript: Problemas com Atributos de um Classe

Um problema que demorei, mas foi bem simples de resolver. O caso é o seguinte: criei uma classe no Javascript, como exemplo abaixo:

function minhaClasse(a,b){
   this.a = a;
   this.b = b;
   this.c = 0;

 
   function calculaC(){

   }
   
   obj.onload = calculaC;
   obj.src = "oi.html"

}


Essa é uma classe imaginária para dar a base que eu quero: como podem ver, a função calculaC é usada como callback de um objeto obj quando ele carregar um arquivo "oi.html". Como o próprio nome da função diz, ele vai ter que atribuir o resultado no atributo c da classe. Entretanto, se a função calculaC for algo assim:


function calculaC(){
   this.c = 100;
}

Aqui vai ocorrer um erro avisando que o c não foi encontrado, porque o objeto que está vinculado ao calculaC não é o objeto minhaClasse, mas sim o objeto obj, pois agora essa função estará vinculada a esse objeto, ou seja, a palavra chave this estará referenciando o obj. Mas como resolvi esse problema. Foi simples, criei uma variável global da classe chamada self e atribui ao próprio objeto. Agora, sempre que for referenciar a própria classe, uso o self e não o this, e independente da função ou objeto que ele está vinculado, sempre estarei referenciando ao meu próprio objeto. Veja como ficaria:

function minhaClasse(a,b){
   this.a = a;
   this.b = b;
   this.c = 0;
   var self = this;

   function calculaC(){
      self.c = 100;
   }
   
   obj.onload = calculaC;
   obj.src = "oi.html"
}

Então é isso pessoal, até a próxima!

Nenhum comentário:

Postar um comentário