2010-09-10 6 views
10

Perché ottengo questi errori?Come indirizzo l'avviso JSLint "Non usare" nuovo "per gli effetti collaterali"?

Problema alla riga 329 carattere 60: Non utilizzare "nuovo" per gli effetti collaterali.

new widget.StyledDropdown(dojo.byId("sTitle"));

Problema alla linea 330 carattere 61: Non utilizzare 'nuovo' per gli effetti collaterali.

new widget.StyledDropdown(dojo.byId("sSuffix"));

Problema alla linea 336 carattere 57: Non utilizzare 'nuovo' per gli effetti collaterali.

true,{shortenName : true,maxChars : 20});

Problema alla linea 338 carattere 129: Non utilizzare 'nuovo' per gli effetti collaterali.

new widget.StyledDropdown(dojo.byId("sCountry"),USPS.Address.countrySw...

+4

Nessuna delle altre otto domande ha ricevuto una risposta accettabile? Nessuna? –

+0

Stavo facendo le domande sbagliate. Ma ho risolto i miei problemi. –

risposta

21

Lei non è la memorizzazione di un riferimento agli oggetti appena creati, che è un odore di codice.

JSLint sta dicendo "Stai creando alcuni oggetti ma li scarti immediatamente, l'unica ragione possibile che puoi fare è che l'atto di creare gli oggetti ha effetti collaterali, il che è strano."

È possibile perdere l'avviso evitando che i costruttori abbiano effetti collaterali (il che significa trovare un altro modo di fare qualsiasi cosa stiano facendo, ad esempio spostando quel codice in una funzione normale) o memorizzando i riferimenti agli oggetti appena creati (anche in una variabile locale temporanea che scarti).

+7

+1, ma * Dio * odio quel termine. –

+0

Se si intende "odore di codice", allora anche io, ma sfortunatamente è abbastanza azzeccato. –

+3

@Tim: Sì, è quello che intendevo. Perché non possiamo semplicemente dire "cattiva pratica"? –

1

Ripensare la strategia è la cosa migliore, ma più spesso, gestire il debito tecnologico durante un ciclo di sviluppo non è un'opzione.

Se si utilizza JSHint, è possibile sovrascrivere questa opzione caso per caso. Aggiungi questo commento jshint nell'ambito del codice incriminato.

/* jshint -W031 */ 
new widget.StyledDropdown(dojo.byId("sTitle")); 
new widget.StyledDropdown(dojo.byId("sSuffix")); 
... 

Le configurazioni in linea hanno lo scopo. Quindi tutto ciò che non rientra nell'ambito del commento verrà comunque controllato.

Problemi correlati