Witajcie,

już tłumaczę o co chodzi. Mam trzy "klasy" w java script: Runner, Menu i Option. Idea jest taka, że opcje należą do menu i wybór opcji powoduje wywołanie funkcji zwrotnej. Każdej opcji można przypisać funkcję zwrotną. Jeżeli po wyborze opcji okazuje się, że opcja nie ma przypisanej funkcji zwrotnej, to wywoływana jest funkcja zwrotna menu. No i wszystko byłoby pięknie, gdybym po prostu chciał wywoływać te funkcje, ale muszę je zwrócić. Zależy mi na tym, bo funkcje mają znaleźć się w callbacku jQuerowych funkcji związanych z animacją.

W tej chwili mam coś takiego:

w Runner przykładowo
[JAVASCRIPT] pobierz, plaintext
  1. menu.options[4].callback = function() {
  2. alert("Jestem funkcją tylko dla opcji "+this.label+".");
  3. }
  4. menu.callback = function() {
  5. alert("Ja jestem funkcją dla wszystkich pozostałych opcji, a wywołano mnie z opcji "+this.label+".");
  6. }
[JAVASCRIPT] pobierz, plaintext


W Menu
[JAVASCRIPT] pobierz, plaintext
  1. this.getCallback = function(option) {
  2. if(typeof this.callback === "function") {
  3. this.callback.apply(option); // chciałbym wstrzyknąć option, ale bez wywoływania metody!
  4. return this.callback;
  5. }
  6. }
[JAVASCRIPT] pobierz, plaintext


W Option
[JAVASCRIPT] pobierz, plaintext
  1. this.getCallback = function() {
  2. if(typeof this.callback === "function") {
  3. return this.callback;
  4. }
  5. else {
  6. return this.menu.getCallback(this);
  7. }
  8. }
[JAVASCRIPT] pobierz, plaintext


Czy istnieje rozwiązanie tego problemu? A może option powinna być argumentem .callback dla menu?



------------------------ EDIT ------------------------



Udało mi się rozwiązać problem. Znalazłem metodę bind() i użyłem jej w taki sposób:

W Menu
[JAVASCRIPT] pobierz, plaintext
  1. this.getCallback = function(option) {
  2. if(typeof this.callback === "function") {
  3. return this.callback.bind(option);
  4. }
  5. }
[JAVASCRIPT] pobierz, plaintext


W Option
[JAVASCRIPT] pobierz, plaintext
  1. this.getCallback = function() {
  2. if(typeof this.callback === "function") {
  3. return this.callback.bind(this);
  4. }
  5. else {
  6. return this.menu.getCallback(this);
  7. }
  8. }
[JAVASCRIPT] pobierz, plaintext


Działa pięknie.