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
  • 相关阅读:
    POJ 3295 spfa判断是否存在负权回路
    hdu 1385 最短路+输出字典序好题
    hdu 1143 递归
    hdu 1598 并查集+贪心其实就是kruskal的思想
    快速排序
    HDU:Fighting for HDU
    HDU:Saving HDU
    HDU:悼念512汶川大地震遇难同胞——老人是真饿了
    每日一题统计指定的字符串
    每日一题2求一个文件里面指定字符出现的次数
  • 原文地址:https://www.cnblogs.com/junwu/p/4742579.html
Copyright © 2011-2022 走看看