funkcje w JS nie wiążą się automatycznie do obiektów.
masz funkcję i jeśli ją wyrwiesz z obiektu, to jest to zwykła funkcja. Możesz ją wywołać, albo podczepić do innego obiektu, np.
innyObiekt.staraFunkcja = staryObiekt.staraFunkcja
. Ale też wtedy musisz napisać tak: innyObiekt.staraFunkcja()
żeby JS załapał, do którego obiektu należy funkcja. Funkcje luzem nie mają podczepionego this
...
...poza przypadkami kiedy mają ;)
jeśli użyłbyś metody call albo apply to mógłbyś napisać:
go.call(foo.baz)
czyli uruchom funkcję w kontekście obiektu foo.baz
(który dla tego konkretnego wywołania stanie się takim this
dla tej funkcji).
jeszcze jest metoda bind, która trwale wiąże kontekst, np.
var go = foo.baz.bar.bind(foo.baz);
alert(go()); // powinno być już 1