2010-07-06 9 views
9
var shell = function (method) { 
     window[method].apply(null, Array.prototype.slice.call(arguments, 1)); 
    }; 

shell('alert', 'monkey!'); 
+12

perché IE è il male – Jimmy

+1

Vedere la risposta a questa domanda: http://stackoverflow.com/questions/120804/difference-between-array-slice-and-array-slice –

+1

no, Array.prototype.slice.call (argomenti, 1) è ok. – galambalazs

risposta

10

alert.apply è il problema. Alert non fa parte della lingua, quindi potrebbe non essere nemmeno una funzione. È dipendente dall'implementazione.

+4

Right - IE espone le API su 'window' e sugli elementi DOM su Javascript, ma l'esposizione è limitata e generalmente non è possibile trattare tali elementi come se fossero componenti JavaScript" reali ". – Pointy

+0

+1 sono d'accordo con i galambalaz. – Krunal

+0

Buon punto, ma non dovrebbe funzionare: var shell = function (metodo) { var fn = window [metodo]; fn.apply = Function.prototype.apply; fn.apply (null, Array.prototype.slice.call (argomenti, 1)); }; shell ('alert', 'monkey!'); – shawndumas