recursividad - Javascript ''esto'' sobreescrito en Z combinator y cualquier otra función recursiva
recursividad ejemplos (1)
Usted podría hacer lo siguiente:
var me = this;
y me
pasa como un argumento para el Z Combinator.
Fondo:
Tengo una función recursiva implementada por un Z-combinator como se muestra aquí y aquí, por lo que no hace uso de arguments.callee
ya que estará en desuso en el próximo ES6 .
Problema
El problema principal con el Z-combinator y todas las funciones anónimas recursivas que he visto hasta ahora es que actualizan this
valor al ámbito interno de la función (el autorecuperado en la cláusula return
), por lo que el que hace referencia al nivel superior está perdido, y quiero mantenerlo a través de todas las funciones internas.
¿Hay alguna manera de mantener el nivel superior sin pasarlo como un argumento de función adicional, que es la forma más obvia de deshacerse de este problema, pero no está tan limpio como yo quiero?
EDITAR:
En este momento resuelvo el problema pasando this
referencia al Z-combinator de esta manera:
Co.Utilities.Z(this.createHTMLFromLOM)(this.LOM, this);
en la función recursiva devuelvo la misma función pasando este valor a la parte superior de la siguiente manera:
function createHTMLFromLOM(callee:any, LOM_section:LOM, self:any):void {
/* Some other code. */
return callee(LOM_section.children[widget], self);
}
Esta es mi definición Z-combinator :
function Z(func:any):any {
var f = function () {
return func.apply(null, [f].concat([].slice.apply(arguments)));
};
return f;
}
Gracias