meld
v1.3.2
Published
AOP for JS with before, around, on, afterReturning, afterThrowing, after advice, and pointcut support
Downloads
8,837
Readme
Aspect Oriented Programming for Javascript. It allows you to change the behavior of, or add behavior to methods and functions (including constructors) non-invasively.
As a simple example, instead of changing code, you can use meld to log the result of myObject.doSomething
:
var myObject = {
doSomething: function(a, b) {
return a + b;
}
};
// Call a function after myObject.doSomething returns
var remover = meld.after(myObject, 'doSomething', function(result) {
console.log('myObject.doSomething returned: ' + result);
});
myObject.doSomething(1, 2); // Logs: "myObject.doSomething returned: 3"
remover.remove();
myObject.doSomething(1, 2); // Nothing logged
Docs
Quick Start
AMD
Get it using one of the following
yeoman install meld
, orbower install meld
, orgit clone https://github.com/cujojs/meld
, orgit submodule add https://github.com/cujojs/meld
Configure your loader with a package:
packages: [ { name: 'meld', location: 'path/to/meld', main: 'meld' }, // ... other packages ... ]
define(['meld', ...], function(meld, ...) { ... });
orrequire(['meld', ...], function(meld, ...) { ... });
Node
npm install meld
var meld = require('meld');
RingoJS
ringo-admin install cujojs/meld
var meld = require('meld');
Running the Unit Tests
Install buster.js
npm install -g buster
Run unit tests in Node:
buster test
What's New
1.3.0
meld()
is now a function that adds aspects.- DEPRECATED:
meld.add()
. Usemeld()
instead.
- DEPRECATED:
1.2.2
- Remove stray
console.log
.
1.2.1
- Fix for IE8-specific issue with meld's internal use of
Object.defineProperty
. - Internally shim Object.create if not available to so that meld no longer requires an Object.create shim to advise constructors in pre-ES5 environments.
1.2.0
meld.joinpoint()
- Access the current joinpoint from any advice type.- Bundled aspects:
- trace: trace method call entry/return/throw
- memoize: simple memoization for methods and functions
- cache: configurable caching aspect to do more than simple memoization
1.1.0
- Advice can be applied directly to methods on a function.
- Removed undocumented behavior that implicitly adds constructor prototype advice: to advise a prototype, pass the prototype as the advice target.
1.0.0
- Removed browser global -
window.meld
is no longer supported. See this post on the cujo.js Google Group for an explanation. - No functional change beyond browser global removal.
See the full Changelog here
References
- AspectJ and Spring Framework AOP for inspiration and great docs
- Implementation ideas from @phiggins42's uber.js AOP
- API ideas from jquery-aop