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的修改,后者是对对象的方法修改

  • 相关阅读:
    iOS 音频视频图像合成那点事
    Android低功耗蓝牙(BLE)使用详解
    android实现超酷的腾讯视频首页和垂直水平网格瀑布流一揽子效果
    基于vue单页应用的例子
    Android 6.0 超级简单的权限申请 (Permission)
    ubuntu创建Centos7镜像&&配置运行环境
    Scikit-learn方法使用总结
    解决TensorFlow最新代码编译错误问题
    jQuery 基础
    数据交换格式 —— JSON(JavaScript Object Notation)
  • 原文地址:https://www.cnblogs.com/shsgl/p/3934374.html
Copyright © 2011-2022 走看看