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⭐⭐⭐
  • 相关阅读:
    Linux 信号signal处理机制
    va_start、va_arg、va_end、va_copy 可变参函数
    辛星笔记——VIM学习篇(推荐阅读)
    每个程序员都应该读的书
    igmpproxy源代码学习——配置信息加载 loadConfig
    windows下gvim搭建IDE
    插入排序与循环不变式
    6个变态的C语言程序
    安卓原生百度地图(5)导航和语音播报
    安卓原生百度地图(4)路线规划
  • 原文地址:https://www.cnblogs.com/surfer/p/9625725.html
Copyright © 2011-2022 走看看