• 高级函数之函数绑定


         

         函数绑定技巧是一个非常流行的高级技巧。

         函数绑定要创建一个函数,可以在特定的this环境中以制定参数调用另一个函数。该技巧常常和回调函数与实践处理程序一起使用,以便在将函数作为变量传递的同时保留代码执行环境。例1如下:

       

        var handler = {
               message: 'Event handled',
    
               handleClick: function(e){
                   alert(this.message);
               }
           }
        var btn = document.getElementById('button');
        btn.addEventListener('click', handler.handlerClick);

    当点击按钮的时候,就调用该函数,显示一个警告框,但是实际显示的内容是undefined而不是Event Handled,这个问题在于没有保存handler.handleClick()的环境,所以this对象是指向了DOM按钮而非handler这个对象。如下使用闭包来修正这个问题。

         var handler = {
               message: 'Event handled',
    
               handleClick: function(e){
                   alert(this.message);
               }
           }
        var btn = document.getElementById('button');
        btn.addEventListener('click', function(e){
            handler.handleClick(e);
        });

        var handler = {
               message: 'Event handled',
    
               handleClick: function(e){
                   alert(this.message);
               }
           }
        var btn = document.getElementById('button');
        btn.addEventListener('click', handler.handleClick.bind(handler));;

    原生的bind()方法和如下的自定义的bind()方法类似,需要传入做为this值的对象,支持原生bind())方法有IE9+,FireFox 4+和Chrome浏览器。

        var handler = {
               message: 'Event handled',
    
               handleClick: function(e){
                   alert(this.message);
               }
           }
        var btn = document.getElementById('button');
        
        btn.addEventListener('click', bind(handler.handleClick, handler));
        function bind(fn, context){
            return function(){
                return fn.apply(context, arguments);
            }
        }
  • 相关阅读:
    AX2009直接交运的bug
    数据库日志
    新蛋中国最新的分类导航,右侧展开菜单,可以修改向左或者向右展开
    用图片代替滚动条的代码
    新蛋网的大图展示效果,缩略图点击显示大图,上一个下一个
    Banner 切换,大小图不同,支持FF和OPERA,IE系列
    下拉菜单,支持所有浏览器
    电容选型
    000.数字电子技术分类
    Altium design16设计技巧
  • 原文地址:https://www.cnblogs.com/xuzhudong/p/8280831.html
Copyright © 2020-2023  润新知