Настроить имя функции и аргументы (например, в `.getString ()`) - PullRequest
0 голосов
/ 14 июля 2020

tl; dr:

Я хочу отредактировать, как выглядит функция. например, когда вы console.log в Firefox или Chrome, я хочу отредактировать аргументы и имя, которые мы видим, а также отредактировать свойства .length и .name. Возможно ли это?

Более длинная версия:

Я хочу скопировать и настроить выполнение данной функции, добавив инструкции до и после. Мой код выглядит так:

function customizeFunction(funcToCustomize) {
    return function(...args) {

        // Some instructions, for example :
        console.log('Calling', funcToCustomize.name);

        // The function itself
        let returnValue = funcToCustomize.call(this, ...args); 
                          // Or simply funcToCustomize(...args) if you prefer
        
        // Some instructions if call terminates :
        console.log('success, no error encountered during call');

        return returnValue;
    }
}

Я тестировал его на консоли Firefox:

let original = function (x,y) {
    console.log(x+y);
};
let custom = customizeFunction(original);
custom(2,3);

/* Output :
Calling original  
5  
success, no error encountered during call debugger eval code:12:17  
undefined
*/

Он работает как задумано. Но всякий раз, когда я это делаю:

console.log(custom);

Он выводит function customizeFunction(args) (тогда как original выводит function original(x,y)). Могу ли я изменить какие-то свойства для вывода function original(x,y) или function custom_original(x,y)?

Кроме того, original.length равно 2, а custom.length равно 0. Могу ли я также изменить это?

1 Ответ

0 голосов
/ 14 июля 2020

Попробуйте переопределить метод toString возвращаемой функции

function customizeFunction(funcToCustomize) {
    let customFunc = function(...args) {

        // Some instructions, for example :
        console.log('Calling', funcToCustomize.name);

        // The function itself
        let returnValue = funcToCustomize.call(this, ...args); 
                          // Or simply funcToCustomize(...args) if you prefer
        
        // Some instructions if call terminates :
        console.log('success, no error encountered during call');

        return returnValue;
    }

  customFunc.toString = function () {
    return funcToCustomize.toString();
  }

   return customFunc;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...