Valóban, a megértés alól az eszközök nem mentenek fel. Később, amikor már értettem, nagyon szúrta a szemem a var that = this; folytonos kiirkálása, de aztán jött a bind.
Nekem az a bajom a this-szel, hogy ha ránézek egy ismeretlen/olyan kódra, amivel rég foglalkoztam, első pillantásra nem mond semmit, hogy melyik objektumról van szó. Ezért hatékonyabbnak tartom hosszabb forrás esetén, ha nem var that = this;-nek nevezem ezt a változót, hanem mondjuk var kulonleges_listbox = this;-nek.
Én inkább osztályokat (prototípusokat) használok, és amikor egy-egy ilyen osztálynak a metódusát definiálom, akkor mindig az adott osztály példányához kötöm a this-t, függetlenül attól, hogy hány forEach, each, stb...-t használok, ahol bindelni kell.
Nekem nagyon nem tetszik az a megközelítés, amit sok helyen látok, és én is alkalmaztam régebben, hogyha valahol callback-et várunk, akkor alapból beállítunk neki egy default context-et. pl
Array.prototype.each = function (callback){
for (var i=0, l=this.length; i<l; ++i)
callback.call(this, this[i], i);
};
Az a baj ezzel, hogy használatkor nagyon nehezen értelmezhető, ha az array contextusában használjuk a callback-et, és nem bindeljük semmihez. Agyalni kell rajta, hogy mi a this... Helyette sokkal következetesebb mindig window-hoz global namespace-hez, stb... kötni alapból, és minden egyéb esetben külön bindelni. (Lehet, hogy csak én követtem el ezt a hibát.)
Mióta komolyabban foglalkozom JS-sel, azóta csak bindet használok ilyen esetekben, viszont nekem az elejétől fogva viszketésem van ettől a "hack"-től, számomra annyira idegen, hogy ahányszor leírom, elgondolkodom, hogy ezt most miért így kell, és miért nincs rá jobb megoldás.
Hehe, kezdőként mennyit
Tényleg jó, hogy van, de a
Valóban, a megértés alól az
var that = this;
folytonos kiirkálása, de aztán jött a bind.Szubjektív
this
-szel, hogy ha ránézek egy ismeretlen/olyan kódra, amivel rég foglalkoztam, első pillantásra nem mond semmit, hogy melyik objektumról van szó. Ezért hatékonyabbnak tartom hosszabb forrás esetén, ha nemvar that = this;
-nek nevezem ezt a változót, hanem mondjukvar kulonleges_listbox = this;
-nek.Én inkább osztályokat
Nekem nagyon nem tetszik az a megközelítés, amit sok helyen látok, és én is alkalmaztam régebben, hogyha valahol callback-et várunk, akkor alapból beállítunk neki egy default context-et. pl
Mióta komolyabban foglalkozom
+1, engem is sokszor zavar.