2011-11-08 8 views
6

stavo studiando il codice sorgente Twitter, e mi sono imbattuto nel seguente frammento:Perché Twitter ridefinisce window.setTimeout e window.setInterval?

window.setTimeout=window.setTimeout;window.setInterval=window.setInterval; 

Perché Twitter ridefinire queste funzioni?

Modifica: Per vedere il codice, andare su qualsiasi pagina utente di Twitter, aprire il codice sorgente della pagina e si vedrà quello snippet nel secondo blocco di javascript.

+0

Qual è il contesto? Non penso che questa domanda sia rispondente senza un link al codice completo. – nrabinowitz

+0

@nrabinowitz Vedi modifica. – JCM

risposta

15

Questa è una tecnica per sostituire le funzioni setTimeout e setInterval globalmente in modo cross-browser.

window.setTimeout, quando viene utilizzato come valore assegnabile (sul lato sinistro della cessione ), non cammina nella catena di prototipi, ma sul lato destro, lo fa. Quindi questo estrae sempre una proprietà dalla catena del prototipo e la colloca direttamente sull'oggetto.

Vedere http://www.adequatelygood.com/2011/4/Replacing-setTimeout-Globally.

+1

Sono un grande fan di questa risposta. –

+0

Perfetto, grazie. – JCM

+2

Nel caso in cui non si voglia leggere l'articolo: La parte cruciale è che questo è usato per aggirare un bug in IE. Nello specifico, l'assegnazione 'setTimeout = ...;' genera un'eccezione a meno che non si utilizzi il trucco sopra. Lo stesso vale per 'setInterval' e altri. – user123444555621