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