面向切面AOP

// 你要统计一下当前的所有函数谁耗时最长
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')

你可能感兴趣的:(面向切面AOP)