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
  • 相关阅读:
    ES 入门记录之 match和term查询的区别
    ElasticSearch 学习记录之Text keyword 两种基本类型区别
    ES 记录之如何创建一个索引映射,以及一些设置
    娱乐至死 读书笔记
    ES 入门之一 安装ElasticSearcha
    王二的经济学故事 读书笔记
    redis特性 存储 API 集群 等
    Linux 卸载 openjdk
    Linux 下面解压.tar.gz 和.gz文件解压的方式
    本地连接 vmware服务器
  • 原文地址:https://www.cnblogs.com/junwu/p/4742579.html
Copyright © 2011-2022 走看看