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

  • 相关阅读:
    c++ stl中的二分查找
    2015年---移动端webapp知识总结
    移动端网站优化指南-WAP篇
    ASO优化总结(基于网络分享的知识总结归纳)
    验证数字的正则表达式集
    个人的浏览器重置样式表(总结)
    微信或移动端网页的meta
    移动端字体和字体大小规范
    min-device-pixel-ratio
    Emmet语法实例(帮助快速开发)
  • 原文地址:https://www.cnblogs.com/shsgl/p/3934374.html
Copyright © 2011-2022 走看看