Javascript 'this' nadpisuje w kombinatorze Z i każdej innej funkcji rekurencyjnej
Tło:
Mam funkcję rekurencyjną zaimplementowaną przez aZ-combinator jak pokazanotutaj itutaj więc nie ma sensuarguments.callee
ponieważ będzie zbliżać się do nadchodzącychES6.
Kwestia
Główny problem zZ-combinator a wszystkie rekurencyjne funkcje anonimowe, które widziałem do tej pory, polegają na aktualizacji dethis
wartość do zakresu funkcji wewnętrznej (zwrócona przez siebie nareturn
klauzula), więcthis
to odwołuje się do utraty najwyższego poziomu i chcę utrzymać go przez wszystkie funkcje wewnętrzne.
Czy istnieje sposób na utrzymanie najwyższego poziomuthis
bez podania go jako dodatkowego argumentu funkcji, który jest najbardziej oczywistym sposobem pozbycia się tego problemu, ale nie jest tak czysty, jak chcę?
EDYTOWAĆ:
Teraz rozwiązuję ten problem, przechodząc na góręthis
odniesienie doZ-combinator lubię to:
Co.Utilities.Z(this.createHTMLFromLOM)(this.LOM, this);
w funkcji rekurencyjnej zwracam tę samą funkcję, przekazując górną wartość taką jak ta:
function createHTMLFromLOM(callee:any, LOM_section:LOM, self:any):void {
/* Some other code. */
return callee(LOM_section.children[widget], self);
}
To jest mójZ-combinator definicja:
function Z(func:any):any {
var f = function () {
return func.apply(null, [f].concat([].slice.apply(arguments)));
};
return f;
}
Dzięki