zoukankan      html  css  js  c++  java
  • ES3之bind方法的实现模拟

    扩展Function原型方法,此处用myBind来模拟bind实现

    Function.prototype.myBind = function(o /*,args*/){
           //闭包无法获取this关键字,故用self进行保存

      var self = this;

           var boundArgs = arguments;
            //返回闭包指针,则闭包的作用域(o和其他arguments)将被保存
            return function(){
                var Args = [];
                //除去第一个对象形参之外的其他参数
                for( i=1;i<boundArgs.length;i++ ){
                    Args.push( boundArgs[i] );
                }

           //获取调用期传入的形参
                for( i=0;i<arguments.length;i++ ){
                    Args.push( arguments[i] );
                }
                //apply接受数组参数形式,将执行结果返回
                return self.apply( o, Args);
            }
        }

      //定义测试函数printProps

        function printProps(/*,args*/){

        //打印便于观察来自绑定阶段的形参和调用阶段的形参
            console.log( arguments );

        //打印绑定的调用上下文(context)中的属性
            for( prop in this ){
                console.log( prop+":"+this[prop] );
            }
        }

        var o = {name:‘test’',age:28};

     //调用myBind函数,返回闭包的指针,因此形参o和其他形参得以保存

       var func = printProps.myBind(o,1,2,3);

     func (4,5,6);

       func('test1','test2','test3');

    运行截图如下:

     

    路漫漫其修远兮,吾将上下而求索。 May stars guide your way⭐⭐⭐
  • 相关阅读:
    分布式算法(一致性Hash算法)
    浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)
    PostgreSQL内核分析——BTree索引
    源码安装postgresql数据库
    QEMU漏洞挖掘
    mysql远程连接数据库
    C++学习之路(十一):C++的初始化列表
    搭建本地git服务器
    C++面试常见问题
    SkipList 跳表
  • 原文地址:https://www.cnblogs.com/surfer/p/9625725.html
Copyright © 2011-2022 走看看