Przekazanie metody do wywołania w konkretnym obiekcie

0

Cześć, mam taką sytuację (typescript), nieistotne elementy w kodzie pominąłem dla czytelności:

export class MyClass {
   foo(){
      this._ajaxManager.doSth(url, 
          function(sender: MyClass){
             sender.modalDialog.show(sender.bar);
          }
   }

   bar() {

   }
}

Krótko mówiąc, metoda foo powinna pokazać jakiś modalDialog, który z kolei powinien po wciśnięciu OK wywołać metodę bar.
I wszystko dzieje się, ale w metodzie bar this wskazuje na guzik, a nie na obiekt klasy MyClass.

Wywołanie tej metody jest robione prosto:

export declare type EventHandler = () => void;

show(action: EventHandler){
  //pokaż okienko, jeśli wciśnięto ok, to wtedy:
  action();
}

Trochę to obszedłem na tyle, na ile znam javascript i wyszło mi ostatecznie coś takiego:

export class MyClass {
   foo(){
      this._ajaxManager.doSth(url, 
          function(sender: MyClass){
             sender.modalDialog.show(sender, sender.bar);
          }
   }

   bar(sender: MyClass) {
      //tutaj używam sender zamiast this
   }
}

I wywołanie show():

export declare type EventHandler = (sender: object) => void;

show(sender: object, action: EventHandler){
  //pokaż okienko, jeśli wciśnięto ok, to wtedy:
  action(sender);
}

I teraz rodzi się pytanie. Czy można to zrobić inaczej niż ja? I pytanie przy okazji jQuery, czy mając coś takiego:

let beforeShowFunc = this[funcName];
$(someObject)on("beforeShow", onBeforeShowFunc);

Mogę inaczej wywołać metodę onBeforeShowFunc, żebym miał this wskazujące na obiekt, którego się spodziewam, niż w taki sposób?

class MyClass
{
foo(funcName: string)
{
  let beforeShowFunc = this[funcName];
  $(someObject)on("beforeShow", this, onBeforeShowFunc);
}

beforeShow(e)
{
    e.data // <-- to mi robi za "this"
}
}

2
export class MyClass {
   foo = () => {
      this._ajaxManager.doSth(url, 
          function(sender: MyClass){
             sender.modalDialog.show(sender.bar);
          }
   }

   bar = () => {

   }
}

Od razu przybinduje this do lambdy, wiec go bedziesz mial, wewntualnie w konstruktorze

ctor(){
this.bar = this.bar.bind(this);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1