javascript - 书上的demo,这里应该怎么理解呢?

查看:115
本文介绍了javascript - 书上的demo,这里应该怎么理解呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

这是装饰者模式。。话说有点蒙

var decorator = function ( input , fn ) {
     // 获取事件源
     var input = document.getElementById(input);
     // 若事件源是已经绑定的事件
     if ( typeof input.onclick === 'function' ) {
         // 缓存事件原有的回调函数
         var oldClickFn = input.onclick;
         // 为事件源添加新的事件
         input.onclick = function () {
             // 事件源原有回调函数
             oldClickFn();
             // 执行事件源新增回调函数
             fn();
         }
     } else {
         // 事件源未绑定事件,直接为事件源添加新增回调函数
         input.onclick = fn;
     }
 };
 // 电话输入框功能装饰
 decorator( 'tel_input' , function () {
        document.getElementById( 'tel_demo_text' ).style.display = 'none' ;
 } )

这函数怎么理解呢?为什么执行了oldClickFn();还要执行fn();?

解决方案

首先,你要清楚「装饰者模式」的含义:以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能。

然后,你给出的代码含义是,无论电话输入框 tel_input 有没有绑定事件,在不影响原有功能基础上,再额外给它加上 fn() 事件,这也正是「装饰者模式」的意义所在。

所以,如果电话输入框 tel_input 原本就有 oldClickFn() 事件,则给它加多一个 fn() 事件,如果它原本没有绑定事件,则只需要执行 fn() 事件即可。

这篇关于javascript - 书上的demo,这里应该怎么理解呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆