AOP装饰函数与小T的情愫(二)

栏目: Java · 发布时间: 7年前

内容简介:老大见小T终于摸清了用AOP装饰函数的一些套路,很是欣慰,决定用实际情景让他试一试,老大拿出了一个最常见的AOP的经典应用之一—数据统计上报的情景,分离业务代码和数据统计上报的代码,在实际开发中项目结尾阶段难免要加上很多统计数据的代码,这个过程可能被迫改动早已封装好的函数.1.老大给小T设定了一个情景如下:页面中有一个登录的button,点击这个button会弹出登录的浮层,与此同时需要进行数据上报来统计有多少用户点击了这个登录的button(这个任务可能是在项目结尾阶段进行的),让小T发现问题并进行改写

老大见小T终于摸清了用AOP装饰函数的一些套路,很是欣慰,决定用实际情景让他试一试,老大拿出了一个最常见的AOP的经典应用之一—数据统计上报的情景,分离业务代码和数据统计上报的代码,在实际开发中项目结尾阶段难免要加上很多统计数据的代码,这个过程可能被迫改动早已封装好的函数.

1.老大给小T设定了一个情景如下:页面中有一个登录的button,点击这个button会弹出登录的浮层,与此同时需要进行数据上报来统计有多少用户点击了这个登录的button(这个任务可能是在项目结尾阶段进行的),让小T发现问题并进行改写:

<html>
    <input type="button" value="login" id="login" />
    <script>
        const login = document.getElementById('login');
        const textlogin = login.tagName;
        let x = 0;
        let showLogin = function () {
            console.log('打开登录浮层');
            log(textlogin);
        }

        let log = function (tag) {
            x = x + 1;
            console.log('上报标签为:' + tag +','+ '上报次数为:' + x);
            // 这里我简单的用login按钮单击的次数来模拟,上报过程略
        }
        login.onclick = showLogin;
    </script>
</html>

小T发现在showLogin函数里既要弹层又要上报点击次数,两个层面的功能,却被耦合在一个函数中,决定用昨天刚写好的AOP试一试:

<html>
    <input type="button" value="login" id="login" />
    <script>
        Function.prototype.after = function(afterfn){
            let _self = this;
            return function(){
                let ret = _self.apply(this,arguments);
                afterfn.apply(this,arguments);
                return ret;
            }
        }
        const login = document.getElementById('login');
        const textlogin = login.tagName;
        let x = 0;
        let showLogin = function(){
            console.log('打开登录浮层');
        }
        let log = function(){
            x = x+1;
            console.log('上报标签为:' + tag +','+ '上报次数为:' + x);
        }
        showLogin = showLogin.after(log); // 打开登录浮层后上报数据
        login.onclick = showLogin;
    </script>
</html>

小T欣喜若狂,这样两个不同层面功能的函数就可以单独维护,不存在耦合问题,决定把自己的成果给老大展示一番,老大看了微微一笑点了点头,觉得小T的进步着实很快,决定让他尝试一下用AOP动态改变函数的参数:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解计算机系统(英文版·第2版)

深入理解计算机系统(英文版·第2版)

[美] Randal E. Bryant、[美] David R. O'Hallaron / 机械工业出版社 / 2011-1 / 128.00元

本书是一本将计算机软件和硬件理论结合讲述的经典教程,内容覆盖计算机导论、体系结构和处理器设计等多门课程。本书的最大优点是为程序员描述计算机系统的实现细节,通过描述程序是如何映射到系统上,以及程序是如何执行的,使读者更好地理解程序的行为为什么是这样的,以及造成效率低下的原因。 相对于第1版,本版主要是反映了过去十年间硬件技术和编译器的变化,具体更新如下: 1. 对系统的介绍(特别是实际使......一起来看看 《深入理解计算机系统(英文版·第2版)》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具