Tip: Click lines to highlight, hold ctrl/cmd to multi-select
JavaScript AOP Framework (6-May @ 10:01)
Syntax Highlighted 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;
- }();
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;
}();