Per convenzione stile mi piace essere esplicito quando sto accedendo variabili in ambito globale, preferendoDevo usare l'auto o la finestra per fare riferimento all'ambito globale?
window.example = "Hello";
window.alert(window.example);
al meno prolissa
example = "Hello";
alert(example);
Ora ho un modulo che potrebbe essere utilizzato direttamente dal browser o, se disponibili, da un web worker. Nei web worker l'oggetto globale è chiamato self
, mentre nel browser si chiama window
.
L'oggetto window
ha una proprietà di auto, in modo da self.example = "Hello"
avrebbe funzionato in entrambi i contesti, a condizione che nessuno redeclares self
(come fanno spesso: var self = this).
Qual è la migliore convenzione con cui andare?
- Utilizzare
self
e sperare che nessuno dichiari unoself
in conflitto. - Se è definito
window
, utilizzarewindow
, altrimenti utilizzareself
. - Qualcos'altro?
Avendo pensato a questo, sono propenso ad andare con il secondo.
Sorprendentemente, questo sembra generare un errore di riferimento quando viene utilizzato nel web worker. Chrome dice: "ReferenceError: Can not find variable: window". Dovrei menzionare che sto usando requireJS per caricare questo modulo dal mio worker, quindi penso che potrebbe essere la fonte di qualche stranezza. – RichardTowers
scuse, ho dimenticato la gestione dura di una variabile che non esiste. aggiustato. – matt3141
'global = typeof window! ==" undefined "&& window! == null? window: self; anche sembra funzionare senza errori. Mi piace la risposta di @ Pointy però. – RichardTowers