手写bind方法

自己封装一个bind方法,需要考虑以下几点:

  • 参数的获取(方法里面的参数和bind返回的函数的参数)
  • this的保存
  • apply或者call的使用
Function.prototype.bind = function (...arg1) {
  //保存this,这里的this指的是test方法
  let self = this;
  //取出第一个参数,也就是this的指向对象
  let obj = arg1[0];
  if (typeof obj === "object") {
    obj = obj || window; //  obj 如果是null就会赋值为window
  } else {
    obj = Object.create(null);
  }
  //剩余参数保存起来
  let params1 = arg1.slice(1);
  //返回一个待执行的函数
  return function (...arg2) {
    //和第一个参数合并为完整的参数
    let params2 = params1.concat(arg2);
    //调用apply方法进行this转换
    return self.apply(obj, params2);
  };
};
var test = function (a, b, c) {
  console.log("x=" + this.x, "a=" + a, "b=" + b, "c=" + c);
};
var o = {
  x: 1,
};
test.bind(o, 1)(2, 3); //x=1 a=1 b=2 c=3
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容