JavaScript基础知识--编写bind函数

48 阅读1分钟

js可以通过多种形式绑定this,一般分为隐式绑定和显示绑定,bind是隐式绑定的一种,想要了解其原理最好是手动编写一次。再次记录其实现过程

  • 首先明确bind绑定的基本用法详情见mdn
  • 开始编写(只实现其基本原理)
Function.prototype._bind = function (thisArg,...argArr) {
  let fn = this;
  function _bind_(...args) {
    let instance = thisArg ? Object(thisArg) : globalThis;
    instance.fn = fn;
    let finalParams = [...argArr, ...args];
    let res = instance.fn(...finalParams);
    delete instance.fn;
    return res;
  }
  return _bind_;
};
  1. 首先明确bind函数会返回一个新的函数,所以首先第一步声明一个_bind_函数,最终将其返回;
  2. 实现_bind内部原理,最终想要的结果是执行_bind函数,而执行_bind函数,就会执行调用_bind的函数,可以通过this获取当前调用_bind的函数fn
  3. _bind函数的第一个参数为fn的this指向,而其他参数则直接传入fn即可,如果_bind第一个参数为null则指向window,基本数据类型则获取其包装类,实用Object包裹即可。
  4. 将fn添加至_bind的第一个参数上面,并将_bind_的自身参数放于末尾。
  5. 执行完毕后删除instance(_bind函数的第一个参数,即最终this要指向的对象)上的fn即可