React

手写bind方法

2021-03-01  本文已影响0人  转移到CSDN名字丹丹的小跟班

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

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
上一篇 下一篇

猜你喜欢

热点阅读