Skip to content

Instantly share code, notes, and snippets.

@kyuwoo-choi
Created June 14, 2017 16:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kyuwoo-choi/2089a4cd041f719777a022a23423d6cc to your computer and use it in GitHub Desktop.
Save kyuwoo-choi/2089a4cd041f719777a022a23423d6cc to your computer and use it in GitHub Desktop.
hello world AOP - proxy
...
function Logger(target, pattern) {
return new Proxy(target, {
get: function(obj, prop) {
var value, name;
if (!Reflect.has(obj, prop)) {
return;
}
name = target.name || target.constructor.name;
value = Reflect.get(obj, prop);
if (typeof value === 'function') {
value = function() {
let result = Reflect.apply(obj[prop], obj, arguments);
if (pattern.exec(prop)) {
console.log(`Function ${prop} retrieved result ${JSON.stringify(result)}`);
}
return result;
}.bind(obj);
}
return value;
}
});
}
class BookCollection {
getNameByISBN(isbn) {
return {
isbn: isbn,
name: 'Proxy + Decorators = AOP'
};
}
}
BookCollection.prototype = Logger(BookCollection.prototype, /^get.*/);
console.log(new BookCollection().getNameByISBN('sdaf'));
// Function getNameByISBN retrieved result {"isbn":"some-isbn","name":"Proxy + Decorator = AOP"}
// Object {isbn: "some-isbn", name: "Proxy + Decorator = AOP"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment