day111-手写原生bind()-1

前言

一般bind()用的比较多的就是创建绑定函数,还有就是偏函数。所以这里可能就是从bind函数的一般用法来考虑实现。MDN上的Polyfill借用slice(),concat(),call()方法。这里也是差不多的实现方法。


  • MDN上的例子

    this.x = 9;    // 在浏览器中,this指向全局的 "window" 对象
    var module = {
    x: 81,
    getX: function() { return this.x }
    }
    module.getX() // 81
    //注意:新手容易错的地方-将一个方法从对象中拿出来,会丢失原来的对象
    var retrieveX = module.getX
    retrieveX()
    // 返回9 - 因为函数是在全局作用域中调用的
  • 利用bind处理

    // 创建一个新函数,把 'this' 绑定到 module 对象
    // 新手可能会将全局变量 x 与 module 的属性 x 混淆
    原始的对象创建一个绑定函数
    var boundGetX = retrieveX.bind(module)
    boundGetX() // 81

代码

  • 实现参数的传递
    Function.prototype.myBind = function (ct) {
    var self = this
    // 获取从第二个参数到最后一个参数
    var args = Array.prototype.slice.call(arguments, 1)

    return function () {
    // 注意:arguments指bind返回的函数传入的参数
    var bindArgs = Array.prototype.slice.call(arguments)
    self.apply(ct, args.concat(bindArgs))
    }
    }

未完。。。

参考

MDN

文章作者: lmislm
文章链接: http://lmislm.com/2019/05/03/2019-05-03/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog