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
menu.options[4].callback = function() { alert("Jestem funkcją tylko dla opcji "+this.label+"."); } menu.callback = function() { alert("Ja jestem funkcją dla wszystkich pozostałych opcji, a wywołano mnie z opcji "+this.label+"."); }
W Menu
this.getCallback = function(option) { if(typeof this.callback === "function") { this.callback.apply(option); // chciałbym wstrzyknąć option, ale bez wywoływania metody! return this.callback; } }
W Option
this.getCallback = function() { if(typeof this.callback === "function") { return this.callback; } else { return this.menu.getCallback(this); } }
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
this.getCallback = function(option) { if(typeof this.callback === "function") { return this.callback.bind(option); } }
W Option
this.getCallback = function() { if(typeof this.callback === "function") { return this.callback.bind(this); } else { return this.menu.getCallback(this); } }
Działa pięknie.