quinta-feira, abril 10, 2008

Javascript: método apply()

O método apply() pode resolver o "problema do this", descrito aqui. As vezes o this refere-se ao objeto Window e não ao objeto que está instanciado. O código abaixo mostra este problema: o metodoA() informa o this corretamente, mas o metodoB() não (é um método privado, mas isso não seria motivo para esse comportamento).


Como solução, no metodoA(), realize a troca na linha 9 para:
_metodoB.apply(this);
Com isso, o método B será chamado "como se fosse chamado" pelo objeto informado no apply(), no caso o this "verdadeiro".

UPDATE1: se precisar atribuir o método em eventos onclick, por exemplo, siga o modelo abaixo:
objeto.onclick = a (this, "meumetodo");
function a (objeto, metodo) {return function () {objeto[metodo].apply(objeto)}}
UPDATE2: ATENCAO - se você passar um parâmetro para o método, o apply pára de funcionar!!!

É isso,
Tooper

obs: caso queira copiar o código, ele segue abaixo.


m = new Classe;
m.metodoA();

function Classe () {

this.metodoA = function () {
alert((this.location) ? "Window" : "Instancia");
_metodoB;
}

function _metodoB () {
alert((this.location) ? "Window" : "Instancia");
}

}

Um comentário: