Classe Delegate
18/12/2008 - 12:15 2 comentáriosCaros,
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

Наткнулся случайно на Ваш блог. Теперь стану постоянно просматривать. Надеюсь, не разочаруете и дальше
[...] 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 [...]