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⭐⭐⭐
  • 相关阅读:
    Autofs
    markdown 基本语法
    Why Linux Doesn’t Need Defragmenting
    How to reconfigure installed dpkg package (tzdata, locales)
    weblogic性能监控
    exec
    在Oracle中查询表的大小
    hadoop主要概念的理解和学习
    ORACLE ASM中查询表空间使用情况、数据文件路径、裸设备磁盘总大小剩余大小
    linux 查看内存和cpu占用比较多的进程
  • 原文地址:https://www.cnblogs.com/surfer/p/9625725.html
Copyright © 2011-2022 走看看