Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Underscore.js
13
//Delegatesto**ECMAScript5**!snative‘forEach‘if
available.
vareach=_.each=_.forEach=function(obj,iterator,
context){
if(obj==null)return;
if(nativeForEach&&obj.forEach===nativeForEach){
obj.forEach(iterator,context);
}elseif(obj.length===+obj.length){
for(vari=0,l=obj.length;i<l;i++){
if(iterator.call(context,obj[i],i,obj)===breaker)&
return;
}
}else{
for(varkeyinobj){
if(_.has(obj,key)){
if(iterator.call(context,obj[key],key,obj)===&
breaker)return;
}
}
}
};
Listing2.Implementacjifunkcjieachwwersjiprodukcyjnej
j.each=j.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)
n.forEach(t,e);elseif(n.length===+n.length){for(varu=0,i=n.
length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}elsefor(var
ainn)if(j.has(n,a)&&t.call(e,n[a],a,n)===r)return};
Jakwidaćjużnapierwszyrzutoka,drugawersjajestpraktycznienieczytelna.
Złożyłosięnatozarównoodpowiednieformatowaniepisanegoprzeznaskodu,
jakistosowaniemożliwienajkrótszychnazwużywanychzmiennych.Otrzymaliśmy
oczywiściedziękitemuznaczniemniejszepliki.Natomiastpierwszaprzedstawiona
wersjajestwpełniczytelnaiprzejrzysta.Możemyprześledzićzarównosposób
implementacji,jakizapoznaćsięzkomentarzamipozostawionymiprzezautora.
Przykładyużycia
Mógłbymwtymmomencieutworzyćstronęinternetową,dodaćdoniejUnder-
score.jsinatymprezentowaćprzykładyjejmożliwości.Jednakskorojednym
zgłównychcelówtejksiążkijestpokazaniemożliwienajwiększejliczbyciekawych
rozwiązańzwiązanychzJavaScriptem,zaprezentujętotrochęinaczej.Możli-