Принудительно вызывать функции Javascript для вызова метода Function.prototype.call - PullRequest
0 голосов
/ 27 августа 2018

Есть ли способ заставить все вызовы функций JavaScript вызывать Function.prototype.call или Function.prototype.apply. Я планирую создать собственную оболочку для этих методов и хочу, чтобы каждый вызов функции вызывал один из этих методов неявно.

Function.prototype.call = function(thisArg){ 
    console.log("this is my custom call method"); 
} 
a = function(){} 
a(); // Doesn't call my shim

1 Ответ

0 голосов
/ 27 августа 2018

Единственный способ перехватить вызовы функций - это Прокси их

  function a() { /*...*/ }

  a = new Proxy(a, {
    apply(fn, context, args) {
      console.log("custom things");
      return Reflect.apply(fn, context, args);
    }
 });

 a();

Однако все функции должны быть явно проксированы, прежде чем ловушка будет выполнена. Или, если у функции нет свойств, это намного проще с:

 function wrap(fn) {
   return function(...args) {
     fn.call(this, ...args);
   };
 }

 a = wrap(a);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...