实现函数的bind方法

思路:
返回一个新函数,新函数内部调用了apply。
目的:
使改变函数的this指向(执行上下文)时,函数的执行变得可控。

   // bind是函数的方法,所以要添加到Function的原型上
    Function.prototype.myBind = function(context) {
      // 获取除了context的其他参数
      let args1 = Array.prototype.slice.call(arguments, 1)
      // 缓存this
      let that = this
      // 返回一个待执行的函数
      return function() {
        // 获取待执行函数全部参数
        let args2 = Array.prototype.slice.call(arguments)
        // 合并两个方法的参数
        let args = args1.concat(args2)
        return that.apply(context, args)
      } 
    }

    const obj = {
      name: 'mayun'
    }
    function demo() {
      console.log('也执行了',arguments)
      return 'success'
    }
    let demoFun = demo.myBind(obj, 1, 2, 3)
    console.log(demoFun)
    demoFun()
    console.log(demoFun())
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容