Javascript 'this' sobrescrevendo em Z combinator e todas as outras funções recursivas
Fundo:
Eu tenho uma função recursiva implementada por umCombinador Z como é mostradoAqui eAqui por isso não faz uso dearguments.callee
uma vez que será preterido na próximaES6.
Questão
A principal questão com oCombinador Z e todas as funções anônimas recursivas que eu vi até agora é que elas atualizamthis
valor para o escopo da função interna (o auto-retornado noreturn
cláusula), de modo que othis
que referencia o nível superior é perdido, e eu quero mantê-lo através de todas as funções internas.
Existe uma maneira de manter o nível superiorthis
sem passá-lo como um argumento de função adicional, que é a maneira mais óbvia de se livrar desse problema, mas não é tão limpa quanto eu quero?
EDITAR:
Agora eu resolvo o problema passando o topothis
referência aoCombinador Z como isso:
Co.Utilities.Z(this.createHTMLFromLOM)(this.LOM, this);
na função recursiva eu retorno a mesma função passando o topo deste valor assim:
function createHTMLFromLOM(callee:any, LOM_section:LOM, self:any):void {
/* Some other code. */
return callee(LOM_section.children[widget], self);
}
Este é meuCombinador Z definição:
function Z(func:any):any {
var f = function () {
return func.apply(null, [f].concat([].slice.apply(arguments)));
};
return f;
}
obrigado