zoukankan      html  css  js  c++  java
  • A2D JS框架

    AOP在js中的实现,先看看用法吧:

            var A2D = $.noConflict();//不要误会,此乃我自己写的A2D框架,非jQuery
    
            function fn1(name, age) {
                console.log("name: " + name);
                console.log("age: " + age);
            }
            function b1() {
                console.log("b1");
                console.log("b1, parameters - 0: " + arguments[0]);
                console.log("b1, parameters - 1: " + arguments[1]);
                console.log("b1, parameters - 2: " + arguments[2]);
                console.log("b1, parameters - 3: " + arguments[3]);
                console.log("b1, parameters - 4: " + arguments[4]);
                console.log("b1, parameters - 5: " + arguments[5]);
            }
            function b2() {
                console.log("b2");
            }
            function a1() {
                console.log("a1");
            }
            function a2() {
                console.log("a2");
            }
    
            var aopfn1 = A2D.aop(fn1, {
                                                before: [b1, b2],
                                                after: [a1, a2]
                                            });
            aopfn1.execute("aaron", 20);

    核心A2D代码实现(before和after AOP,实现了6个参数):

    function aop(fn, config) {
            if (!fn instanceof Function)
                alert("fn must be a function");
            if (config == null || config == undefined || !config instanceof Object)
                alert("config can not be empty");
    
            function aopWrapper(fn, config) {
                this.realFunction = fn;
                this.beforeFunctions = config.before.concat();
                this.afterFunctions = config.after.concat();
            }
            aopWrapper.prototype.execute = function () {
                if (this.beforeFunctions)
                    for (var fn in this.beforeFunctions)
                        this.beforeFunctions[fn].call(this.realFunction,    arguments[0],
                                                                            arguments[1],
                                                                            arguments[2],
                                                                            arguments[3],
                                                                            arguments[4],
                                                                            arguments[5]);
                this.realFunction.call(this.realFunction,   arguments[0],
                                                            arguments[1],
                                                            arguments[2],
                                                            arguments[3],
                                                            arguments[4], 
                                                            arguments[5]);
                if (this.afterFunctions)
                    for (var fn in this.afterFunctions)
                        this.afterFunctions[fn].call(this.realFunction,     arguments[0],
                                                                            arguments[1],
                                                                            arguments[2],
                                                                            arguments[3],
                                                                            arguments[4],
                                                                            arguments[5]);
            }
    
            wrapper = new aopWrapper(fn, config);
    
            return wrapper;
        }

    有图有真相:

     

    搞前端的,为什么这么难。。。。

  • 相关阅读:
    【转】织梦为栏目添加图片的方法
    写在php设计模式前
    memcache 开机启动
    php 列出当前目录
    print echo 的区别
    php 报错等级
    nginx 启动脚本
    centos 编译 安装php
    修改linux iptable规则
    linux yum 安装软件
  • 原文地址:https://www.cnblogs.com/aarond/p/A2D-AOP.html
Copyright © 2011-2022 走看看