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

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

потому что IE злой – Jimmy

+1

См. Ответ на этот вопрос: http://stackoverflow.com/questions/120804/difference-between-array-slice-and-array-slice –

+1

нет, Array.prototype.slice.call (аргументы, 1) в порядке. – galambalazs

ответ

10

alert.apply есть проблема. Предупреждение не является частью языка, так что это может быть даже не функция. Это зависит от реализации.

+4

Право - IE предоставляет API-интерфейсы на 'window' и на элементах DOM для Javascript, но экспозиция ограничена, и вы вообще не можете рассматривать такие вещи, как если бы они были« реальными »компонентами Javascript. – Pointy

+0

+1 согласен с galambalazs. – Krunal

+0

Хорошая точка, но тогда не должна эта работа: var shell = function (method) { var fn = window [method]; fn.apply = Function.prototype.apply; fn.apply (null, Array.prototype.slice.call (аргументы, 1)); }; shell ('alert', 'monkey!'); – shawndumas