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

questionAnswers(1)

yourAnswerToTheQuestion