Tip: Click lines to highlight, hold ctrl/cmd to multi-select

JavaScript AOP Framework (6-May @ 10:01)

www.flickr.com-photos-bjarlestam

Syntax Highlighted Code

  1. /**
  2.  * AOP framework for aspect oriented programming in JavaScript
  3.  */
  4.  
  5.  var AOP = AOP || function() {
  6.  
  7.      //Private methods
  8.  
  9.      function toArray(iterable) {
  10.          if (!iterable) return [];
  11.          if (iterable.toArray) return iterable.toArray();
  12.          var length = iterable.length || 0, results = new Array(length);
  13.          while (length--) results[length] = iterable[length];
  14.          return results;
  15.      }
  16.  
  17.  
  18.      //Public methods
  19.  
  20.      var public = {
  21.          around: function(obj, fname, advice) {
  22.              var oldFunc = obj[fname];
  23.              obj[fname] = function() {
  24.                  var args = [oldFunc].concat(toArray(arguments));
  25.                  return advice.apply(this, args);
  26.              };
  27.          },
  28.  
  29.          before: function(obj, fname, advice) {
  30.              var oldFunc = obj[fname];
  31.              obj[fname] = function() {
  32.                  var args = [oldFunc].concat(toArray(arguments));
  33.                  advice.apply(this, args);
  34.                  return oldFunc.apply(this, arguments);
  35.              };
  36.          },
  37.  
  38.          after: function(obj, fname, advice) {
  39.              var oldFunc = obj[fname];
  40.              obj[fname] = function() {
  41.                  var args = [oldFunc].concat(toArray(arguments));
  42.                  oldFunc.apply(this, arguments);
  43.                  return advice.apply(this, args);
  44.              };
  45.          },
  46.          
  47.          callMethod: function(args) {
  48.              var argsArray = toArray(args);
  49.              return argsArray[0].apply(this, argsArray.slice(1));
  50.          }
  51.      };
  52.  
  53.      return public;
  54.  }();

Plain Code

/**
 * AOP framework for aspect oriented programming in JavaScript
 */
 
 var AOP = AOP || function() {

     //Private methods

     function toArray(iterable) {
         if (!iterable) return [];
         if (iterable.toArray) return iterable.toArray();
         var length = iterable.length || 0, results = new Array(length);
         while (length--) results[length] = iterable[length];
         return results;
     }


     //Public methods

     var public = {
         around: function(obj, fname, advice) {
             var oldFunc = obj[fname];
             obj[fname] = function() {
                 var args = [oldFunc].concat(toArray(arguments));
                 return advice.apply(this, args);
             };
         },

         before: function(obj, fname, advice) {
             var oldFunc = obj[fname];
             obj[fname] = function() {
                 var args = [oldFunc].concat(toArray(arguments));
                 advice.apply(this, args);
                 return oldFunc.apply(this, arguments);
             };
         },

         after: function(obj, fname, advice) {
             var oldFunc = obj[fname];
             obj[fname] = function() {
                 var args = [oldFunc].concat(toArray(arguments));
                 oldFunc.apply(this, arguments);
                 return advice.apply(this, args);
             };
         },
         
         callMethod: function(args) {
             var argsArray = toArray(args);
             return argsArray[0].apply(this, argsArray.slice(1));
         }
     };

     return public;
 }();

Codedump Run

Permalink: http://codedumper.com/javascript-aop-framework