JSFiddle - React, Tailwind, and code Playground

JavaScript

// define the mutator as 'Monitor', use as Mointor: ['methodname', 'method2'...]
Class.Mutators.Monitor = function(methods){
    if (!this.prototype.initialize) this.implement('initialize', function(){});
    return Array.from(methods).concat(this.prototype.Monitor || []);
};

Class.Mutators.initialize = function(initialize){
    return function(){
        Array.from(this.Monitor).each(function(name){
           var original = this[name];
           if (original) this[name] = function() {
               console.log("[LOG] " + name, "[SCOPE]", this, "[ARGS]", arguments);
               original.apply(this, arguments);
           }
        }, this);
        return initialize.apply(this, arguments);
    };
};

var foo = new Class({
    
    Monitor: 'bar',
    
    initialize: function() {
        this.bar("mootools");
    },
    
    bar: function(what) {
        alert(what);
    } 

});

var f = new foo();
f.bar.call({hi:"there from a custom scope"}, "scope 2");