Pesquisa personalizada

Classe Delegate

18/12/2008 - 12:15 2 comentários

Caros,

Quando você está programando em Javascript Orientado a Objetos, você pode se deparar com diversos problemas e um deles é a perda de escopo do objeto (this). Uma solução simples é usar a classe Delegate, em poucas palavras ela executa uma função/método no contexto do objeto original.

Segue a classe abaixo:

// No Google...  - Estático
Delegate = {
    versao: "1.0"
}

Delegate.create = function(obj, func, args) {
    f = function() {
        var target = arguments.callee.target;
        var func   = arguments.callee.func;
        var args   = arguments.callee.args;

        return func.apply(target, (args.length < 1 ? arguments : args));
    };

    f.args = (args != undefined && args.length > 0 ? args : new Array());
    f.target = obj;
    f.func = func;

    return f;
}

Outra forma bacana e mais simples que achei:

Delegate = {
	create: function (obj, func, params) {
		var f = function() { return func.apply(obj, params); };

		return f;
	}
}

Exemplo da implementação:

...
this.a = function() {
// Não chame a função this.b() desta forma,
// pois ela executará antes do tempo correto
	setTimeout(Delegate.create(this, this.b, Array('')), 1000);
}

this.b = function() {
	alert(this.c());
}

this.c = function() {
	return 'Olá';
}
...

Essa classe me quebrou vários galhos.

Abs,
Chapoo

Autor: Chapolin - Categoria(s): Javascript, Orientação a objetos, Utilidade pública Tags: , , , , , , , , ,

2 comentários para "Classe Delegate"

  1. 26/05/2009 - 17:57 Enviado por: Кузьма

    Наткнулся случайно на Ваш блог. Теперь стану постоянно просматривать. Надеюсь, не разочаруете и дальше

  2. 29/12/2008 - 10:29 Enviado por: » Solução alternativa do Delegate - Danilo Trindade - Javascript, Php e o que der na telha…

    [...] muitos casos que postei aqui e também em situações profissionais usei o Delegate (post anterior) e simplesmente ele resolveu vários problenas quando estava trabalhando com classes [...]

Deixe um comentário