• JS实现AOP


    JS实现AOP  


     

    <script>
    function actsAsAspect(obj,handlers) {
            if(typeof obj == 'function'){
                obj = obj.prototype;
            }
            
            for(var methodName in handlers){
                var _handlers = handlers[methodName];
                for(var handler in _handlers){
                    if((handler == 'before' || handler == 'after') && typeof _handlers[handler] == 'function'){
                        eval_r(handler)(obj,methodName,_handlers[handler]);
                    }
                }
            }

            function before(obj,method,f) {
                var original = obj[method];   
                obj[method] = function() {
                    f.apply(this, arguments);   
                    return original.apply(this, arguments);   
                }
            }

            function after(obj,method, f) {   
                var original = obj[method];   
                obj[method] = function() {
                    original.apply(this, arguments);   
                    return f.apply(this, arguments);   
                }
            }
        }
        
        //actsAsAspect(Test,{'say2':{before:function(){alert('before');},after:function(){alert('after');}}});   
        
        function Test(){}   

        //actsAsAspect(Test,{'say2':{before:function(){alert('before');},after:function(){alert('after');}}});   

        Test.prototype.say2 = function(s){
            alert(s);
        }
        
        actsAsAspect(Test,{'say2':{before:function(){alert('before');},after:function(){alert('after');}}});   

        var t = new Test(); 

        //actsAsAspect(t,{'say2':{before:function(){alert('before');},after:function(){alert('after');}}});  
        t.say2("hello2"); 

    </script>

    由于新浪的编辑器太差了,把eval_r改成eval就可以运行了

    支持对Class 和 Object 两种类型的AOP,前者是基于对prototype的修改,后者是对对象的方法修改

  • 相关阅读:
    python
    【转载】【CPU】关于x86、x86_64/x64、amd64和arm64/aarch64
    【百思不得其解1】诡异的速度差异
    LeakCanary 与 鹅场Matrix ResourceCanary对比分析
    android 插件化框架VitualAPK
    android高级篇收录
    滴滴Booster移动APP质量优化框架 学习之旅 三
    滴滴Booster移动APP质量优化框架 学习之旅 二
    滴滴Booster移动APP质量优化框架 学习之旅
    不一样视角的Glide剖析
  • 原文地址:https://www.cnblogs.com/shsgl/p/3934374.html
Copyright © 2020-2023  润新知