Már régóta nem volt bejegyzés, mostanság feltorlódtak a tennivalók, de remélem lassan több időm jut a blogra.
function doSg(){
console.log( this,arguments ); //listázzuk a bejövő paramétereket
}
Gyorsan kreáltunk egy függvényt, most nézzük meg bind használatát, a jó öreg setTimeout függvény segítségével.
setTimeout("doSg(true, 'almafa' )",1000)
Ekkor a console-ra a következő kerül kiírásra: DOMWindow, [true, "almafa"]
Mellesleg ha így hívnád a setTimeoutot azt felejtsd el, ugyanis a doSg függvény az (evil) evallal kerül lefuttatásra.
setTimeout( function(){
doSg( true, 'almafa' ); }, 1000);
Így már egy kicsit másabb és ugyanazt azt eredményt érjük el, a consolera szintén a következő került: DOMWindow, [true, "almafa"]
Most állítsuk be a doSg függvény meghívásakor a this értéket:
setTimeout(function(){
doSg.call( this.document, true, "almafa");},1000);
Nos most a Document, [ true, "almafa" ] került kiírása, ez így már kezd szexi lenni:)
Már csak egy baj van, ugye minden alkalommal ha a doSg függvényhez rendelni akarunk, valamilyen paramétert akkor létre kell hozni egy anonymus függvényt, amit nem annyira szeretünk, ugyanis ha paraméter nélkül hívjuk a doSg-ot akkor ilyen egyszerűen is megtehetjük:
setTimeout( doSg, 1000);
Ekkor a kimenet a DOMWindow, [] lesz.
Ennek a probléma megoldására vezették be bindot, anélkül tudunk hozzárendelni függvényhez paramétereket, hogy az azonnal lefutna, vagy anonymus functionba kellene írni. Nézzük, hogy nézne ki a setTimeoutunk:
setTimeout( doSg.bind( this.document, true, "almafa" ), 1000);
Woow, ez már így igen szép, és a kimenete is a következő: Document, [ true, "almafa" ].
Szvsz engem teljesen lenyűgöz, ugyanis borzalmasan utálok folyamatosan anonymus függvényeket írogatni.
FF, és a Chrome már biztosan támogatja, IE-ről sajna még nincs infóm, de szerencsére az MDC-ben van egy egyszerű workaround a Function.bind megvalósítására illetve találhattok további példákat a használatára.