Как я переношу функцию в JavaScript?

29
задан Paul Roub 18 April 2019 в 13:58
поделиться

2 ответа

Лично вместо того, чтобы загрязнить встроенные объекты я пошел бы с методом декоратора:

var makeSafe = function(fn){
  return function(){
    try{
      return fn.apply(this, arguments);
    }catch(ex){
      ErrorHandler.Exception(ex);
    }
  };
};

можно использовать его как этот:

function fnOriginal(a){
  console.log(1/a);
};

var fn2 = makeSafe(fnOriginal);
fn2(1);
fn2(0);
fn2("abracadabra!");

var obj = {
  method1: function(x){ /* do something */ },
  method2: function(x){ /* do something */ }
};

obj.safeMethod1 = makeSafe(obj.method1);
obj.method1(42);     // the original method
obj.safeMethod1(42); // the "safe" method

// let's override a method completely
obj.method2 = makeSafe(obj.method2);

, Но если Вы действительно испытываете желание изменять прототипы, можно записать его как этот:

Function.prototype.TryCatchWrap = function(){
  var fn = this; // because we call it on the function itself
  // let's copy the rest from makeSafe()
  return function(){
    try{
      return fn.apply(this, arguments);
    }catch(ex){
      ErrorHandler.Exception(ex);
    }
  };
};

Очевидное улучшение должно будет параметризовать makeSafe (), таким образом, можно определить что функцию звонить в блок выгоды.

48
ответ дан Eugene Lazutkin 28 November 2019 в 01:26
поделиться

До загрязнения пространств имен я на самом деле собираюсь загрязнить их еще немного... Начиная со всего, что происходит в JS, инициируется событием некоторого вида, я планирую вызвать свою волшебную функцию обертки из Прототипа Event.observe () метод, таким образом, я не должен называть его везде.

я действительно вижу оборотные стороны всего этого, конечно, но этот конкретный проект в большой степени связывается с Прототипом так или иначе, и я действительно хочу иметь этот код обработчика ошибок быть максимально глобальным, так это не имеет большого значения.

спасибо за Ваш ответ!

-1
ответ дан Daniel Magliola 28 November 2019 в 01:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: