setErrorHandler
в приведенном выше коде не устанавливает обработчик ошибок для функции как таковой.JavaScript не дает вам возможности изменять вызываемый код внутри объекта Function.
Вместо этого он создает упакованную версию вызываемой функции и возвращает ее.
obj.setErrorHandler(myHandler);
Можетне работает, так как возвращаемая функция-обертка выбрасывается, ни к чему не приписываемаяс разными, упакованными версиями.Это не обязательно будет работать во всех случаях и, безусловно, может привести к путанице в стороннем коде.По крайней мере, вы хотели бы убедиться, что вы не оборачиваете функции дважды, а также сохраняете значение времени вызова this
в оболочке:
that.apply(this, a);
(Примечание: вам не нужноручное преобразование arguments
в массив. Допустимо передать объект arguments
непосредственно в apply
.)