Search code examples
javascripteventsprototype-programming

javascript fire method before or after another method is called


I would like to know what are the common approach to make this concept works:

function Abc () {
  var beforeMethod = function (e) {
    console.log(e);
  };

  this.before('bob ana', beforeMethod);
}

Abc.prototype.ana   = function () { console.log('ana'); }

Abc.prototype.bob   = function () { console.log('bob'); }

Abc.prototype.maria = function () { console.log('maria'); }

//

var abc = new Abc();

abc.ana();

It's supposed to call beforeMethod before bob or ana is called.


Solution

  • Quickly :

    need to be tested and securised, but i think it do the trick ! I haven't understood what your e mean so i put the called method name in it !

    var el = document.getElementById('debug');
    var $l = function(val) {
        console.log(val);
        el.innerHTML = el.innerHTML + '<div>' + val + '</div>';
      };
    //___________________________________________________________________
    
    var Before = function( methods , func , context){
      methods.split(' ').map(function(m){
        var ori = context[m];
        if(ori){
          context[m] = function(){
            func.call(context , m);
            return ori.apply(context , arguments);
          };
        } 
      });
    };
    
    var Abc = function () {
      var beforeMethod = function (e) {
        $l('from beforeMethod : ' + e);
      };
    
      Before('bob ana ', beforeMethod , this);
    };
        
        Abc.prototype.ana   = function () { $l('from ana '); };
        
        Abc.prototype.bob   = function () { $l('from bob '); };
        
        Abc.prototype.maria = function () { $l('from maria '); };
        
        var abc = new Abc();
        
        abc.ana();
        abc.maria();
        abc.bob();
    <div id='debug'>Debug
      <div>