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_;
};
- 首先明确bind函数会返回一个新的函数,所以首先第一步声明一个_bind_函数,最终将其返回;
- 实现_bind内部原理,最终想要的结果是执行_bind函数,而执行_bind函数,就会执行调用_bind的函数,可以通过this获取当前调用_bind的函数fn
- _bind函数的第一个参数为fn的this指向,而其他参数则直接传入fn即可,如果_bind第一个参数为null则指向window,基本数据类型则获取其包装类,实用Object包裹即可。
- 将fn添加至_bind的第一个参数上面,并将_bind_的自身参数放于末尾。
- 执行完毕后删除instance(_bind函数的第一个参数,即最终this要指向的对象)上的fn即可