zoukankan      html  css  js  c++  java
  • 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的修改,后者是对对象的方法修改

  • 相关阅读:
    侧滑的一个注意
    viewpager+fragment结合
    webview
    动画
    <context:annotation-config> 和 <context:component-scan>的区别
    spring mvc 原理及应用
    HDU
    使用Log4Net将系统日志信息记录到记事本和数据库中
    chromium for android GPU进程结构分析
    【云图】怎样制作全国KTV查询系统?
  • 原文地址:https://www.cnblogs.com/shsgl/p/3934374.html
Copyright © 2011-2022 走看看