2013-06-10 15 views
8

Utilizzo un'assegnazione delle funzioni in fase di esecuzione per tenere conto delle differenze tra browser. Tuttavia, per i browser non supportati, voglio restituire una funzione vuota in modo che non venga generato un errore JavaScript.Come restituire correttamente una funzione vuota?

Ma, jslint si lamenta delle funzioni vuote. Qual è il modo felice di jslint per farlo?

Blocco vuoto.

$R.functionNull = function() { 
    // events not supported; 
}; 

$R.Constructor.prototype.createEvent = (function() { 
    if (doc.createEvent) { 
     return function (type) { 
      var event = doc.createEvent("HTMLEvents"); 
      event.initEvent(type, true, false); 
      $NS.eachKey(this, function (val) { 
       val.dispatchEvent(event); 
      }); 
     }; 
    } 
    if (doc.createEventObject) { 
     return function (type) { 
      var event = doc.createEventObject(); 
      event.eventType = type; 
      $NS.eachKey(this, function (val) { 
       val.fireEvent('on' + type, event); 
      }); 
     }; 
    } 
    return $R.functionNull; 
}()); 
+0

[JSHint] (http://jshint.com/) ha un'opzione di tollerare blocchi vuoti, non credo JSLint ha questa opzione. – epascarello

+0

Jslint piace che le cose siano esplicite e facili da leggere, quindi penso che si aspetta che tu ritorni indefinito. –

risposta

9

È possibile aggiungere un corpo per la vostra funzione e farlo tornare undefined:

$R.functionNull = function() { 
    // Events not supported. 
    return undefined; 
}; 

questo mantiene la stessa semantica come una funzione "veramente vuota", e dovrebbe soddisfare JSLint.

+0

ancora è più facile scrivere 'void 0' ed evita anche gli argomenti: P – Esailija

4

Per me questo funziona meglio:

emptyFunction = Function(); 

console.log(emptyFunction); // logs 'ƒ anonymous() {}' 
console.log(emptyFunction()); // logs 'undefined' 

E 'così breve che non avrei nemmeno assegnarlo ad una variabile (naturalmente si può anche utilizzare una costante come variabile "EF" o giù di lì, che è ancora più corto e non ha bisogno delle parentesi "()" aggiuntive). Basta usare "Funzione()" ovunque sia necessaria una funzione veramente vuota, che non abbia nemmeno un nome, nemmeno quando lo si assegna a una variabile, e questa è la piccola differenza di comportamento tra la mia soluzione e quella di Frédéric:

// --- Frédéric --- 

emptyFunction = function() { 
    return undefined; 
} 

console.log(emptyFunction.name); // logs '"emptyFunction"' 

// --- me --- 

emptyFunction = Function(); 

console.log(emptyFunction.name); // logs '""' (or '"anonymous"' in chrome, to be fair) 
0

Utilizzare l'espressione lambda:

$R.functionNull =() => void 0; 
Problemi correlati