zoukankan      html  css  js  c++  java
  • 学习javascript设计模式之装饰者模式

    1、装饰者模式定义:给对象动态添加职责的方式称为装饰者(decorator)模式。

    js如何实现装饰者模式

    通过保存原函数引用方式改写某函数

    window.onload = function(){alert(1);}
    var _oldonload = window.onload || function(){};
    window.onload = function(){
        _oldonload();
        alert(2);
    }

    缺点:1、_oldonload需维护。 2、this被劫持。如document.getElementById this会指向window。

    AOP装饰函数:

    Function.prototype.before = function(beforefn){
        var __self = this;//保存原函数的引用
        return function(){//返回了包含原函数和新函数的代理函数
            beforefn.apply(this,arguments);//执行新函数,且保证this不被劫持,新函数接受的参数也会原封不动被传入原函数,新函数和原函数之间执行
            return __self.apply(this,arguments);//执行原函数并返回原函数的执行结果,并且保证this不被劫持
        }
    }
    Function.prototype.after = function (afterfn){
        var __self = this;
        return function (){
            var ret = __self.apply(this,arguments);
            afterfn.apply(this,arguments);
            return ret;
        }
    }

    var t1 = function(param){
        //alert(111);
        console.log(param);//{a:"a",name:"sss"}
    }


    var t2 = t1.before(function(param){
        //alert(222);
        param.name = 'sss';
    })
    t2({a:'a'});

    //实例一

          var showlogin = function(){
            console.log("打开登录浮动层");
    
        }
    
        var log = function(){
            console.log('上报标签'+this.getAttribute("tag"));
        }
    
        showlogin=showlogin.after(log);
        document.getElementById("btn").onclick= showlogin;

          打开登录浮动层
          上报标签showlog
  • 相关阅读:
    司法相关学习网站视频资料
    小型网站如何防范DDoS攻击
    教你9招 破解多种系统登陆密码方法 (1)
    加快Win7整体运行速度的12个小技巧
    手机指令大全,需要可以看看
    Java、fileless恶意软件威胁桌面安全
    浅谈Android手机木马手工查杀
    Win7路由器设置过程
    如何加强移动应用开发安全?
    FTP常用故障代码注解
  • 原文地址:https://www.cnblogs.com/junwu/p/4742579.html
Copyright © 2011-2022 走看看