面向切面AOP
2019-05-15 本文已影响0人
zxhnext
// 你要统计一下当前的所有函数谁耗时最长
function test(name) {
// var start = ;
console.log(2, name);
// var end = ;
// console.log(end - start);
return "test";
}
Function.prototype.before = function (fn) {
var __self = this; // 指向调用它的函数test,保存原函数引用
return function () { // 将test函数返回但先不执行,返回包含了原函数和新函数的"代理函数"
fn.apply(__self, arguments) // 执行新函数,修正this
return __self.apply(__self, arguments); // 执行原函数test()
}
}
Function.prototype.after = function (fn) {
var __self = this; // 保存原函数引用
return function () { // 返回包含了原函数和新函数的"代理函数"
var result = __self.apply(__self, arguments); // 执行原函数,获取test()返回值
if(result == false) {
return false;
}
fn.apply(__self, arguments); // 执行新函数,修正this
return result; // 将test()返回值return出去
}
}
var testFun = test.before(function(){
console.log('before: ' + new Date().getTime());
}).after(function(){
console.log('after: ' + new Date().getTime());
});
console.log('testFun', testFun)
testFun('zxh')