javascript AOP实现

参考:http://www.cnblogs.com/rubylouvre/archive/2009/08/08/1541578.html

复制代码
        function Person(){
            this.say =  function(name,lang){
                console.log("我的名字叫做"+name+",专注于"+lang+"...");
            }
        }
        
        (function() {
            //AOP(面向切面编程)的javaScript实现
            jsAOP = {
                /**
                 * target 切入的目标对象
                 * method 切入的目标函数(相对于target)
                 * advice 切入点执行函数
                 * **/
                before:function(target,method,advice){
                    //备份原函数
                    var original  = target[method];
                    target[method] = function(){
                        (advice)();
                        original.apply(target, arguments);
                    };
                    return target
                },
                after:function(target,method,advice){
                    var original  = target[method];
                    target[method] = function(){
                        original.apply(target, arguments);
                        (advice)();
                    };
                    return target
                },
                around:function(target,method,advice){
                    var original  = target[method];
                    target[method] = function(){
                        (advice)();
                        original.apply(target, arguments);
                        (advice)();
                    };
                    return target
                }
            };
        }());
        
        window.onload = function(){
            var p = new Person ();
            p = jsAOP.before(p,"say",function() {
                console.log("请你介绍一下自己!");
            });
            p = jsAOP.after(p,"say",function() {
                console.log("嗯,不错,明天来上班吧!");
            });
            p = jsAOP.around(p,"say",(function() {
                var index = -1;
                return function() {
                    index++;
                    if(index == 0) {
                        console.log("介绍开始!");
                    }else{
                        console.log("介绍结束!");
                        index = -1;
                    }
                };
            }()));
            p.say("赖祥燃","javascript");
        };
复制代码

参考:http://www.cnblogs.com/rubylouvre/archive/2009/08/08/1541578.html

posted @   laixiangran  阅读(841)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示